集合框架
集合collection
常用方法:
add(Object obj),addAll(Collection),size(),isEmpty(),contains(),containsAll(), remove(Object obj),removeAll(),hashcode(),equals(),toArray()
addAll是把Collection中的所有元素添加进去,add是把Object当作一个整体添加
集合与数组的相互转换
集合 --》 数组 :toArray()
数组 --》 集合 :调用Arrays的静态方法asList()
向Collection中添加元素的要求:
要求元素所属的类一定要重写equals() !
原因:
因为Collection中的相关方法(contains()/remove())在使用时,需要调用元素所在类的equals()
public void test3(){
Collection coll = new ArrayList();
coll.add("AA");
coll.add(123); // autoboxing
coll.add(new Object());
coll.add(new Person("Tom",12));
//delete
//coll.clear();
System.out.println(coll); //[]
System.out.println(coll.size()); //0
coll.remove(new Person("Tom",12)); //delete when you overwrite equals() in Person class
System.out.println(coll); //[AA, 123, java.lang.Object@7506e922]
}
Iterator(迭代器)
作用:用来遍历集合元素
遍历方法
Collection coll = new ArrayList();
coll.add("AA");
coll.add(123); // autoboxing
coll.add(new Object());
coll.add(new Person("Tom",12));
//get Iterator
Iterator iterator = coll.iterator();
//method1
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
//System.out.println(iterator.next()); error when exceed the element number in collection
//method2
for(int i=0 ;i< coll.size();i++){
System.out.println(iterator.next());
}
//method3 recommend
while(iterator.hasNext()){
System.out.println(iterator.next());
}
增强for循环
作用:用来遍历集合,数组
for(元素类型 变量名 : 要迭代的对象)
for(Object obj : coll){
System.out.println(obj);
}
int[] arr = new int[]{1,2,3,4,5};
for(int i : arr){
System.out.println(i);
}
List
接口特点:用于存储有序的,可以重复的数据 ---》使用list替代数组,动态数组
常用方法:
collection中的方法,remove(int index),set(int index,Object ele),get(int index),add(int index,Collection eles )
实现类:ArrayList(主要实现类)添加数据,查找数据效率较高。插入删除数据效率较低
,Vector(古老不太用了),
LinkedList,插入删除数据效率较高,添加查找数据效率低
创建
List list = new ArrayList()
Set
接口特点:用于存储无序的,不可重复的数据
常用方法:即collection中的15个方法
实现类:HashSet(主要实现类)
LinkedHashSet(HashSet是HashSet的子类)
TreeSet
无序性: 数据存放位置无序,根据哈希值计算的其在数组中的存储位置。
不可重复性:判断hashCode()得到的哈希值与equals()得到的结果。哈希值与equals()结果都为True则认为相同。为什么要判断两个,因为不同的元素哈希值是有可能相同的
TreeSet使用
特性:底层使用红黑树存储,可以按照添加的元素的指定的属性的大小进行遍历
底层数据结构:红黑树
添加元素的要求:必须是同一个类型的对象,否则汇报ClassCastException
判断数据是否相同:不在考虑hashcode()和equals()方法了,所以添加到TreeSet中的元素不必要重写这两个方法。而是采用compareTo()或compare()返回值来比较所以必须要实现。若返回值为0,由于红黑树性质无法放入
Map
特点:存储一堆一堆的数据 (类似python中的字典)
实现类:HashMap:(主要实现类)
LinkedHashMap:是HashMap的一个子类,在其基础上增加了双向链表用于记录添加元素的顺序
TreeHashMap:使用红黑树存储
HashTable:古老实现类
Properties
HashMap
特点
key不可重复,无序,所有的key就构成一个Set集合 ---》key所在类要重写hashCode()和equals()
value之间可重复,无序,所有value构成一个collection集合。---》value所在类要重写equals()
key和value构成一个整体 entry。
常用方法
增:put(Object key,Object value),putAll(Map m)
删:remove(Object key)
改:put(Object key,Object value)
查:get(Object key)
长度:size()
遍历:
遍历key集:keySet()
遍历value集:values()
遍历entry集:entrySet()
Collections工具类
collections是一个操作Set,List和Map等集合的工具类
排序操作:
reverse(List):反转List中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):按自然顺序对List集合元素升序排序
sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
swap(List,int,int):将指定List集合的i处元素和j处元素进行交换
查找:
max(Collection):自然排序
max(Collection,Comparator):指定排序
min(Collection)
min(Collection,Comparator)
frequency(Collection,Object):找集合中指定元素出现的次数
复制
//copy(List dest,List src):将src中的内容复制到dest中
//错误写法,会报错 要求dest大小大于src
List src = new Array.asList(43,45,6,3,5,324,22);
List dest = new ArrayList();
Collections.copy(dest,src);
//正确写法
List src = new Array.asList(43,45,6,3,5,324,22);
List dest = new Array.asList(new Object[src.size()]);
Collections.copy(dest,src);
unmodifiableList(List):返回一个不能修改的试图 简单来说就是返回一个和输入一样的List但这个List只能读不能写