单列集合
来源:互联网 发布:微信点菜系统java源码 编辑:程序博客网 时间:2024/06/05 10:20
List集合
- 存储有序
- 元素有索引
- 存储元素可以重复
ArrayList: 底层为数组,查询块,增删慢,查询块
LinkedList: 底层为链表,查询慢,增删快
Vector: 底层为数组,线程安全,增删和查询都慢,已经被ArrayList替代.
Set集合
- 存储无序
- 元素无索引
- 存储的元素不能重复
Set集合实现元素添加,使用的是双列集合map的put方法,因为map集合的键是唯一的,不允许重复,刚好满足set集合的需求.
查看HashSet和TreeSet的add()方法,源码如下:
public boolean add(E e) { return m.put(e, PRESENT)==null;}
Hashset: 底层为hash表.
HashSet保证元素唯一性源码分析:
public V put(K key, V value) { // 得到哈希值 int hash = hash(key); int i = indexFor(hash, table.length); //遍历集合,将集合中所有元素与待添加元素进行比较 for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //如果hash值不同直接添加 //如果hash相同,则比较内容,如果内容相同,则返回原元素值,不添加 //hash值不同,内容不同则添加 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null;}
HashSet
为了保证元素的唯一性,添加元素比较hashcode
值,如果hash值不一样,直接添加.如果一样,则比较地址值或者通过equals
方法比较内容.自定义对象的hash值都不相同,没有办法实现去重.所以需要重写hashcode方法和equals
方法.重写hashcode
时,一般会和对象的属性相关联,从而降低一部分equals
方法的比较,从而可以提高我们程序的效率
TreeSet: 底层为二叉树
TreeSet
保证集合元素唯一性原理:要保证元素唯一性,首先存储的元素需要具备可比较性,基本数据类型的包装类都实现comparable
接口,具备可比较性.
如果要存储自定义对象,该自定义对象需具备可比较性,有两种方式:
第一:让该类实现Comparable
接口,重写compareTo()
方法,在compareTo()
方法中自定义比较方式.
第二:让该类实现Comparator
接口,重写compare()
方法自定义方法排序,参见TreeSet构造方法.
public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator));}
既然谈到比较了,现将以下几种比较方式进行对比分析:
==, .equals(), compareTo(), and compare()
==
- 如果比较基本数据类型,比较的是字面值.
- 如果比较的是引用,则可以用于比较判断该引用指向是否为空.
- 可以比较两个枚举值,因为一个枚举常量只能有一个对象.
- 可以用于判断两个引用是否指向同一个对象.
a.equals(b)
比较字面值是否相等,定义在object类中如下:
public boolean equals(Object obj) { return (this == obj);}
其他类如果不重写该方法,则相当于使用==进行比较
a.compareTo(b)
该方法来源于Comparable
接口,比较的是数值,返回一个int数,判断值小于(返回一个负数),等于(返回0),或者大于(返回一个正数)如果一个类实现了comparable
接口,定义了compareTo()
方法.所有Java类中实现了该接口的类,都可以进行自然顺序.
compare(a, b)
该方法来源于Comparator
接口,可以用于TreeMap and TreeSet
集合对数据进行排序.可以自定义方法,对事物进行比较排序,比如可以定义一个方法,根据字符串的长度,对字符串进行排序.
- 单列集合
- 单列集合
- 单列集合
- 单列集合
- 单列集合
- 单列集合
- 单列集合的体系
- java_单列集合复习
- Java单列集合总结
- JAVA 单列集合总结
- java 单列集合总结
- 单列集合ArrayList
- 集合框架(单列集合)
- 集合框架(Collection单列集合)
- 集合类:单列集合--Collection
- javaAPI(Collection单列集合1)
- JavaSE--单列集合的使用
- 黑马程序员_集合_单列集合
- C# 通过DataGridview的直接更新MSSQL
- 模重复平方算法
- 138.杀毒功能的实现
- Java堆栈的关系理解
- 写一个BaseController来提取出json化输出数据和非json化输出数据
- 单列集合
- spring-orm4中抛弃了HibernateTemplate方法
- JQuery的使用
- 查找
- 4.25
- 【数学】概念的理解 —— 有序对(ordered pair)
- quartz-Example1 学习
- 文章标题
- URI和URL的区别