集合框架知识总结
collection
collection接口是集合框架的最父类
接口,定义了一些最共性的方法;
例如:add (); remove(); isEmpty(); size(); clear(); contains();
addAll(); containsAll(); removeAll();删除所有相同元素 retainAll();保留所有相同元素
注:带有All的方法传入的参数基本都是集合;
Iterator
Iterator是集合的迭代器对象;抽取了所有集合的取出的共性(一个一个的取出);
Iterator中只有三个方法:hasNest(); next(); remove();
集合中会有iterator()方法来获取集合迭代器对象。
例如:
Iterator it = coll.iterator(); for(Iterator it = coll.iterator() ; it.hasNext(); ){ //开发时使用这for循环个迭代。 }
集合框架细节:
集合中存入基本数据类型时基本数据类型自动装箱。
集合中存储的是对象的引用。
集合执行add()方法后,存入的类型提升为Object,取出后应当强转。(可以使用泛型解决强转问题)
List集合:
特点是:带索引,元素可以重复,操作都是基于索引来的;
List中有一个特殊的迭代器:ListIterator 可以在迭代过程中修改元素。
//List 集合中含有一个 listIterator(); 用于获取Iterator对象 ListIteraoor it = new ListIterator()
LinkedList集合:
特点:数据结构是链表, 增加删除比较快, 查询比较慢; 不同步
LinkedList集合中的方法基本都是针对链表的头/尾来操作的,所以可以用于实现堆栈,队列数据结构;
ArrayList集合:
特点:可增长的数组结构,查询快,增删慢; 不同步
ArrayList集合中的方法针对索引操作;
Set集合:
特点:无重复元素,但是不保证元素的顺序(输入和输出的一致性);
HashSet集合:
特点:使用了Hash表的Set集合;
注意: 1:出入元素时首先判断元素对象的hasfCode()函数返回结果是否一致;
2:然后判断对象的equals()函数的返回值是否一致;
##如果hashCode()和equals()判断都一致--->元素是相同的;
####如果存入的自定义的数据类型,并需要按照特定的元素一致标准:
在自定义对象中复写 hashCode(),和equals();可以使用ctel+alt+s选中自动添加
TreeSet集合:
特点:集合内部实现了排序,使用的二叉树结构
TerrSet使用add()函数时会对元素进行排序,内部实现会对元素进行排序时:
将需要存入的对象转为Comparable类型然后使用compareTo()方法进行对象的比较大小;
需求:需要对存入TreeSet集合的自定义的对象进行自定义排序算法:
1:(自然排序)将自定义对象实现Comparable接口并复写compareTo()方法;
注意:复写compareTo()方法时需要 判断主要条件后判断次要条件,最终判断大小;
2:(比较器排序)在定义TreeSet集合时在构造函数中传入一个自定义的比较器对象;
首先定义自己的比较器类,实现Comparator接口并重写compare()方法,将Comparator子类对象传入TreeSet构造函数中;
自然排序接口: Comparable接口,compareTo()方法; 使用在被排序的类上;
比较器接口: Comparator接口,compare()方法; 使用在自定义的比较器类;
public int compare(Object o1,Object o2){ String s1 = (String )o1; String s2 = (String )o2; int temp = s1.lenth()-s2.length(); //判断主要条件 return temp == 0 ? s1.compareTo(s2) : temp; //判断次要条件 }
LinkedHashSet集合:
特点:查询效率高,存储的内容有序(存入取出一致)唯一;
Linked-->存入有序; Hash-->查询高效 Set-->元素唯一 Tree-->元素以排序 list-->含有索引
Map集合:
Map<String,String> map = new Map<String,String>();
添加并返回:String s = map.put("星期一","monday"); //返回前一个
查询并返回:String value = map.get("星期一");
删除并返回:String s = map.remove("星期一");
.........
###两种返回Map集合的方法:
1:使用Map集合的keySet(); 返回Map集合中的所有Key值到Set集合中; 遍历含有key的Set集合
//获取存放key值得Set集合 Set<String> keys = map.keyset(); //获取Set集合的迭代器 Iterator<String> it = keys.iterator(); //迭代获取key值,配合get();取出value值
2:使用Map集合的entrySet()方法获得Map.Entry()对象的Set集合。 遍历含有Map.Entry对象的Set集合
Map.Entry类型是Map集合的内部类,是Map的映射关系的对象
//获取存放Map.entery的set集合 Set<map.Entry<String,String>> entrySet = map.entrySet(); //获取Set集合的迭代器,迭代取处Map.Entry Iterator<map.Entry<String,String>> it = entrySet.iterator(); //接下来使用Map.Entry 的方法取出key ,value;
keySet() ----> key的Set集合
map.enrtySet() -----> Map.entry的Set集合
COllections工具类
Collections工具类里面包含了一些针对集合操作的方法,在操作集合时需要方法时可以去看;
里面有一些很重要的方法:
例如:
Collections.syschronizedList()方法 为ArrayList等集合加锁; List list = Collections.syschronizedList(new ArrayList(.....));
对排序逆序
求集合元素的最值
Arrays工具类
用于操作数组的工具类
代表方法有 数组转集合函数 可以使用集合的方法操作数组
int [] arr = new int{2,5,6,7,26}; List list = Arrays.asList(Arr);
数组转集合函数中,得到的集合的长度是固定长度的(由于数组的长度是不可变的)
使用asList时: 如果数组中的元素是基本数据类型--->集合中存入的是数组对象;
如果数组中存放的是引用数据类型---->集合中存放的是由数组中的对象转成的集合元素;