JAVA SE集合总结

一、集合的结构框架


  1.线性集合Collection,所有线性集合需要实现Collection接口
映射性集合Map,所有映射性集合需要实现Map接口


Collection接口:List接口和Set接口


List接口的实现类:
ArrayList类,LinkedList类,Vector(Stack)


Set接口的实现类:
HashSet(LinkedHashSet),TreeSet


  2.线性集合:Collection接口


二、List接口:
  1.特点:总体上有序存储(针对存入元素的顺序),不排重,可以存储相同的元素


  2.ArrayList类:
总体上有序存储(针对存入元素的顺序),不排重,可以存储相同的元素,底层通过数组实现


  3.ArrayList类中的常用方法:


  4.ArrayList集合的遍历:
1)普通for循环:
2)增强for循环:
3)使用迭代器Iterator,调用集合从Collection接口中实现的 方法,获取集合的迭代器
4)使用迭代器ListIterator,此迭代器是List接口中方法, ListIterator继承与Iterator


  5.LinkedList类:
总体上有序存储,不排重,可以存储相同的元素,底层通过链表 实现,每一个元素除了存储了自己的数据外,还存储了下一个元 素的地址


  6.ArrayList和LinkedList的区别
当对集合元素查询和修改操作频繁时,首选ArrayList
当对集合元素添加和删除操作频繁时,首选LinkedList


  7.Vector:
底层通过数组
Stack类:存储特点是栈


三、Set接口:
总体上无序存储,排重,不允许存储相同的对象


  1.HashSet类:
相对无序存储,排重,不允许存储相同元素,底层通过哈希表


排序规则:
字符和字符串:Unicode
数值:大小
boolean:true>false
Date:后面的日期大


Set集合排重时:先调用对象的equals方法判断两个对象是否相等,若equals方法返回true,比较两个对象的hashCode方法的返回值,若相等,视为两个对象相同,第二个对象就无法添加集合


  2.LinkedHashSet类:
由于底层通过链表实现,所以相对有序存储,排重,不允许存储相同元素


  3.TreeSet:
Set接口的实现类,同时还实现了SortedSet接口,SortedSet中提供了一组方法


1).存储特点:
相对无序,内部会对元素重新排序,排重,底层通过二叉树


树结构:一个根节点,旁支出多个子节点,每个子节点也会旁支 出多个子节点


二叉树:每一个节点中最多只能有两个子节点


2).对TreeSet中元素的重新排序:


3)自然排序:
TreeSet集合会自动调用元素的compareTo方法,对元素进行比较,从大到小进行排序


compareTo方法的来源:
String类中存在compareTo方法,试想TreeSet中的元素是否与String类有关,此猜想不对,由于String类是final的不能有子类
TreeSet中元素不可能与String类有任何关系


compareTo方法是来自于Comparable接口的,TreeSet中的元素必须实现Comparable接口


compareTo方法的比较规则:
obj1.compareTo(obj2);
0:obj1 == obj2
正数:obj1 > obj2
负数:obj1 < obj2


自然排序:将元素按照自然顺序排序,元素需要实现Comparable接口,重写compareTo方法,compareTo方法除了可以实现排序功能外,还可以实现排重功能,必须在compareTo方法中对类中每个属性进行判断比较


  


4)定制排序:
TreeSet集合会自动调用元素的compare方法,对元素进行排序


  compare方法的来源:
实现Comparator接口
重写compare方法:


compare方法的比较规则:
0:obj1 == obj2
正数:obj1 > obj2
负数:obj1 < obj2


  4.自然排序和定制排序的区别:
他们都是实现对TreeSet集合中的元素重新排序的方法,实质上没有区别,由于compareTo方法和compare方法中的比较逻辑都是有我们主观定义,所以两种排序方法都可以对TreeSet集合中的元素进行从新排序
一般compareTo方法就是实现升序,而compare方法实现降序




四、Map接口:
HashMap(LinkedHashMap)
Hashtable(Properties)
TreeMap


  Map集合中所有的元素以键值对形式存在,key-value
key:表示键
value:表示值


  Map集合的特点:
1)key-value是一一对应
2)key不可以重复,但是value可以重复,整体排重
3)可以通过key快速查询到对应的value的值
4)当给相同的key再次赋值时,新的value替换掉旧的value


  1.HashMap:
相对无序无序的,排重(按key排重),底层通过哈希表实现


  2.Map集合的遍历
1)可以单独遍历key:使用keySet方法,先获取所有的key,遍 历Set集合即可
2)可以单独遍历value:使用values方法,先获取所有的value ,遍历Collection集合即可
3)遍历键值对:
  i.通过key快速查询对应的value:先获取所有的key(keySet方法),遍 历key的同时使用get方法获取对应的value
  ii.将Map集合转换成一个Set集合:先使用entrySet方法将map集合转换 为Set集合,再遍历set集合即可
Map接口中的内部接口Map.Entry


  3.LinkedHashMap:是HashMap类的子类
相对有序,原因是底层链表实现,key不可重复,value可以,整体排重


  4.Hashtable类:
相对无序,底层通过哈希表实现,key排重,整体排重


  5.HashMap和Hashtable的异同:
方法完全一致
Hashtable中的方法都是线程安全的,HashMap中的方法是非线程安全的
Hashtable不允许存在null的key和value,HashMap中允许存在null的key和value




  6.TreeMap:
实现了Map接口的同时,也实现了SortedMap接口

底层通过二叉树实现的集合,相对无序,排重,TreeMap集合会对元素进行从新排序


自然排序
TreeMap集合自动调用元素的键的compareTo方法
定制排序
TreeMap集合自动调用元素的键的compare方法


五、总结:
  1.数组和集合的异同:
i.数组和集合都是存储数据的容器;
  ii.数组定长,一旦初始化长度,就不可以修改;集合不定长;
iii.数组中可以存储基本数据类型和引用数据类型;集合中只能 存储引用数据类型
iv.数组中的元素只能是相同数据类型,集合中可以存储任意类


  2.集合的排重性:
Set:HashSet,LinkedHashSet,TreeSet
Map:HashMap,LinkedHashMap,TreeMap,Hashtable


  3.集合底层实现:
1)数组:ArrayList,Vector
2)哈希表:HashSet,HashMap,Hashtable
3)链表:LinkedList,LinkedHashSet,LinkedHashMap
4)二叉树:TreeSet,TreeMap


  4.相对顺序:(相对存储的顺序)
List:相对有序
Set和Map:总体上相对无序


Linked..:相对有序


六、Collections类:工具类:(区别于Collection接口)
此类中提供了一组对集合进行操作的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值