Java集合框架:
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
(Collection是·所有Java集合框架的父接口;Collections操作集合的工具类)
Iterator:是迭代器
- 接口:
- 具体实现类:
- 算法:
Collections(提供了对集合进行排序,遍历等多种算法实现)
Collection接口存储一组不唯一(可以重复),无序的对象
List接口存储一组不唯一,有序(插入顺序)的对象
0 1 2 3 4 5 aaaa dddd cccc aaaa eeee dddd
Set接口存储一组唯一,无序的对象
aaaa dddd cccc
Map接口存储一组键值对象,提供key到value的映射(KV值)
CN JP RU FR China Japan Russia France
键Key都是唯一的,而且是无序的
而值Value不一定是唯一的(可以有两个China)
List接口:
List接口的实现类:
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
0 1 2 3 4 5 aaaa dddd cccc aaaa eeee dddd
ArrayList常用方法:
方法名 说明 Boolean add(Object 0) 在列表的末尾顺序添加元素,起始索引位置从0开始 Void add(int index,Object 0) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 int size() 返回列表中的元素个数 Object get(int index) 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 boolean contains(Object 0) 判断列表中是否存在指定元素 Boolean remove(Object 0) 从列表中删除元素 Object remove(int index) 从列表中删除指定位置元素;起始索引位置从0开始
Collection接口常用通用方法还有:clear()(清空)、isEmpty()(返回布尔值要么空,要么不空)、iterator()、toArray()
equals(object【另外一个集合】):判断两个集合的内容是否一样,从第一个开始一次比较
subList(0,2):取出该集合下标0到1的集合并组成一个新的集合
这些红色的都是父接口Collection有的方法。在set和LinkedList这些方法都有
集合里不能添加基本数据类型,只能添加对象或者添加引用数据类型
LinkedList采用链表存储方式。插入、删除元素时效率比较高
注意这样声明,无法使用LinkedList独有的方法:List list = new LinkedList();
而应该这样声明:LinkedList list = new LinkedList();
LinkedList中独特的方法:
方法名 说明 void addFirst(Object 0) 在列表的首部添加元素 void addLast(Object 0) 在列表的末尾添加元素 Object getFirst() 返回列表中的第一个元素 Object getLast() 返回列表中的最后一个元素 Object removeFirst() 删除并返回列表中的第一个元素 Object removeLast() 删除并返回列表中的最后一个元素
lastIndexOf(object arg0)最后一个重复的元素的下标
ArrayList和LinkedList有何异同?
- ArrayList和LinkedList都是list的两个实现类,可以通过get拿出来
- ArrayList适用于遍历取值,不适用于插入增加
- LinkedList插入删除的时候效率比较高,而且LinkedList还有很多自己的独特方法
Set接口:
- Set接口存储一组唯一,无序的对象
- HashSet是Set接口常用的实现类
- Set中存放对象的引用
Set接口如何判断加入对象是杏已经存在呢?
采用对象的equals()方法比较两个对象是否相等
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.printIn(set.size());
最后输出1。
String重写了equals的方法,所以如果字符串一样equals最后返回的一定是true。
HashSet是Set接口常用的实现类:
Set newsTitleSet = new HashSet();
NewTitle car = new NewTitle(1,“汽车","管理员");
//增加元素
newsTitleSet.add(car);
//获取元素个数
System.out.println("新闻标题数目为: "+ newsTitleList.size()+ "条");
然而Set接口不存在get()方法:
newsTitleSet.get(0);
因为set是无序的没有索引,所以不能用下标输出。想要获取元素可以用增强性的for
如何遍历Set集合?
方法1:增强型for循环
方法2:通过迭代器lterator实现遍历:(lterator和Collection是两个并列的接口)
- 获取Iterator:Collection 接口的iterate()方法(set和list都有这个方法)
- lterator的方法
【boolean hasNext():判断是否存在另一个可访问的元素】
【Object next();:返回要访问的下一个元素】
有序的list想要get出有3种方法:
- 普通for,遍历索引
- 增强型for
- 迭代器lterator实现遍历
无序的set想要get只有2种方法:
- 增强型for
- 迭代器lterator实现遍历
Map接口:
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
【最常用的实现类是HashMap】
//往map集合里添加键值对
countries.put("CN", "中华人民共和国");
countries.put("RU", "俄罗斯联邦共和国");
countries.put("FR", "法兰西民主共和国");
countries.put("U.S.", "美利坚合众国");
//获取map的元素(对)数
System.out.println(countries.size());
//通过某个键获取对应值
String country = (String)countries.get("CN");
System.out.println(country);
//判断map中是否包含某个键
boolean flag = countries.containsKey("U.S.");
System.out.println(flag);
//删除特定键对应的键值对
countries.remove("U.S.");
flag = countries.containsKey("U.S.");
System.out.println(flag);
//分别显示map中键集,值集,和键值对集
System.out.println(countries.keySet());
System.out.println(countries.values());
System.out.println(countries);
//清空
countries.clear();
if(countries.isEmpty()){
System.out.println("清空");
}
Map接口常用方法:
方法名 说明 Object put(Object key, Object val) 以“键-值”对的方式进行存储 Object get(Object key) 根据键返回相关联的值, 如果不存在指定的键,返回null Object remove(Object key) 删除由指定的键映射的“键值对” Int size() 返回元素个数 Set keySet() 返回键的集合 Collection values() 返回值的集合 boolean containsKey(Object key) 如果存在由指定的键映射的 “键-值对”,返回true
Map中取出数据的方法:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292496.html