内容:
1、List相关
2、Set相关
3、Collection总结
4、Map相关
5、Collections介绍
1、List相关
(1)List集合存储数据的结构
List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,
在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表
堆栈(栈)的特点:
队列的特点:
数组的特点:
链表的特点:
(2)List接口的特点及其实现类
List接口的特点:
List接口实现类:ArrayList、LinkedList、Vector
List接口的方法:
实现类中的方法:
(3)LinkedList集合
LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除
经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。如下图
LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList的特有方法即可。
在开发时,LinkedList集合也可以作为堆栈,队列的结构使用
使用实例:
1 public class useLinkedList { 2 public static void main(String[] args) { 3 LinkedList<String> link = new LinkedList<String>(); 4 // 添加元素 5 link.addFirst("abc1"); 6 link.addFirst("abc2"); 7 link.addFirst("abc3"); 8 // 获取元素 9 System.out.println(link.getFirst()); // abc3 10 System.out.println(link.getLast()); // abc1 11 // 删除元素 12 System.out.println(link.removeFirst()); // abc3 13 System.out.println(link.removeLast()); // abc1 14 15 while (!link.isEmpty()) { // 判断集合是否为空 16 System.out.println(link.pop()); // 弹出集合中的栈顶元素 17 // abc2 18 } 19 } 20 }
2、Set相关
(1)Set接口的特点及其实现类
Set接口的特点:
Set接口实现类:HashSet、LinkedHashSet、TreeSet
Set接口的方法:没有特有方法,基本和父接口Collection类一模一样
实现类中的方法:实现类中的方法基本和Set一模一样
(2)哈希相关
对象的哈希值:任何对象都有一个哈希值,哈希值是对象的一个数字表示
对象的字符串表示:toString方法,默认表示格式:包名.类名@地址值(这里的地址值实际上是哈希值的16进制)
如何获取对象的哈希值 =》hashCode方法
什么是哈希表:
哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些
对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把
这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表
hashCode方法和equals方法:
当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。
由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,
算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象
的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果
返回的是false,就会把这个值存放在哈希表中。
注意:String类重写了hashCode方法,按照自己的方式计算,”abc”和”acD”哈希值相同
总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,
那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。
(3)Set使用实例
3、Collection总结
(1)Collection
Collection分类:
Collection方法:
(2)List和Set
List与Set集合的区别:
List集合中的特有方法(下标):
List和Set的实现类:
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率不高
HashSet:
元素唯一不能重复
底层结构是 哈希表结构
元素的存与取的顺序不能保证一致
LinkedHashSet:
元素唯一不能重复
底层结构是 链表结构+哈希表结构
元素的存与取的顺序一致
如何保证元素的唯一的:重写hashCode() 与 equals()方法
原文:https://www.cnblogs.com/wyb666/p/10350444.html