集合
数组:长度不可变
集合:长度可变
1.集合类概述:
Collection是集合框架的父接口
子接口:List 和 Set
List常用的实现类:ArrayList和LinkedList
Set常用的实现类:HashSet和TreeSet
继承关系:
java.util:
Map |
---|
HashMap |
TreeMap |
Collection |
---|
Set & List |
HashSet TreeSet & ArrayList LinkedList |
2.list集合
特点:有序,可以有重复元素
ArrayList:
具有数组结构的List集合,有下标,可以通过下标增添或删除集合中的元素,长度可改变,增添和删除都不需要手动扩容和缩容
LinkedList:
双向链表结构,无下标
List常用方法:
ArrayList:add() 将制定项目添加到列表末尾
add(String str , int index) 将内容增添到指定位置
remove(int index) 指定位置移除
remove(String str) 第一次出现的位置移除
removeAll() 删除所有内容
replaceItem(String str , int index) 替换指定位置
size() 取长度
get(int index) 获取指定位置的元素
LinkedList:getFirst() 获取头元素
element() 获取头元素
getLast() 获取尾元素
poll() 获取元素并删除头节点
remove() 无参时代表删除头节点
3.Set集合:
List:有序可重复
Set:无需不可重复
Set是接口,无法直接创建对象,需通过实现类来创建对象
1》HashMap(散列集合):
Set set = new HashSet();
HashSet set = new HashSet();
2》TreeSet(存放有序):
不能添加null值,如果调用compareTo()方法,会出现空指针异常
注意:要想指定集合的存放顺序,被排序的对象需要实现接口Compareble并实现CompareTo方法
HashSet保证元素的唯一性的比较原理:
当比较两个对象是否一样时,首先比较两个对象的hashcode值,如果hashcode值相同再调用equals方 法进行比较。如果equals比较返回true就判定这两个对象相同。如果hashcode值不相同,就直接判定 两个对象不相同,不会再调用equals方法
Set遍历集合:
//迭代器遍历集合
//1.根据集合获取集合对应的迭代器
Iterator iterator = set.iterator();
//2.判断是否有下一个元素,如果有就返回true并且执行循环,如果没有,说明已经取到迭代器末尾
while (iterator.hasNext()) {
//3.取出光标后面的元素,next()取出下一个元素
Object obj = iterator.next();
System.out.println(obj);
}
4.Map集合:Map<key , value>
特点:无序
注意:一个键对应一个值,不能有重复的键
Map是一个接口,无法直接创建对象,需实现类来创建
常用实现类:HaspMap TreeMap
常用方法:put(key , value) 存入Map
get(key) 通过键获取值
containsKey(key)查找是否包含该键
containValue(value) 查找是否包含该值
遍历Map集合:
//遍历map集合<key,value>
//获取主键集合
Set set = map.keySet();
System.out.println("====foreach====");
for (Object object:set) {
//System.out.println(object);
System.out.println("<"+object+","+map.get(object)+">"); }
System.out.println("====迭代器遍历====");
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Object object = iterator.next(); //
System.out.println(object);
System.out.println("<"+object+","+map.get(object)+">");
}
//entrySet()遍历
//此种方式是先将map集合中的key和value整体放入set集合中,相当于将map集合转换成了set集合
System.out.println("====entrySet()====");
Set set1 = map.entrySet();//将map集合转换成了set集合
Iterator it = set1.iterator();
while(it.hasNext()) {
Map.Entry entry = (Entry) it.next();
System.out.println("<"+entry.getKey()+","+entry.getValue()+">");
}
5.Collection 和 Collections 的区别
Collection:父接口
Collections:操作集合类的工具,封装了一些对集合操作的方法
Collections方法:
.sort(list) 排序
.shuffle(list) 打乱
.max(list) 求集合中的最大值
.min(list)求集合中的最小值
.replaceAll(list , value , index) 替换
6.自定义比较器:
》Comparator:接口,无法直接创建对象
(1)实现一个比较器类来实现接口
(2)实现compare方法
》Comparable:将实体类创建的对象具有可比较性
(1)在实体类上实现comparable接口
(2)实现CompareTo()方法 (后面一般会指定泛型)