使用元素的自然顺序对元素进行排序
或者根据创建set时提供的Comparator比较器进行排序
具体取决于使用的构造方法
排序:
1、自然排序(传入的数据类型具备实现了Comparable接口)
2、比较器排序
在创建集合的时候,调用带参数的构造方法,这个参数是实现了Comparator接口的子类对象
TreeSet保证元素的排序和唯一性
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
注意:若将自建类对象存储进TreeSet需要实现comparable接口,重写compareTo方法
因为add()方法中需要用到compareTo方法来判断大小来进行树排序
自己根据类的情况,来分析主要条件次要条件,来返回0还是正负值
//TreeSet构造方法时无参的解决方法(自然排序) public class Student implements ComparableCollection集合类总结 Collection(接口) List(接口) 元素有序,不唯一{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + ''' + ", age=" + age + '}'; } @Override public int compareTo(Student o) { int i1=this.name.compareTo(o.name); int i2=i1==0?this.age-o.age:i1; return i2; } } //比较器排序 class Student{ .... } class Test{ public static void main(String args[]){ TreeSet students=new TreeSet<>(new Comparator (){ @Override public int compare(Stduent o1,Student o2){ int i1=o1.name.compareTo(o2.name); int i2=i1==0?o1.age-o2.age:i1; return i2; } }); } }
List相关集合有三种遍历方式
1、结合size()和get()方法有普通for循环
2、迭代器遍历方式
3、增强for循环
ArrayList
底层是数组,查询快,增删慢
线程不安全,效率高
Vector
底层是数组,查询快,增删慢
线程安全,效率低
linkedList
底层是链表,查询慢,增删快
线程不安全,效率高
Set(接口) 元素唯一,无序Set相关集合有三种遍历方式
1、迭代器方式遍历
2、增强for循环
HashSet
底层依赖哈希表,依赖hashCode()和equals()方法来保证元素唯一的
linkedHashSet
底层依赖哈希表和链表,哈希表保证元素唯一,链表保证元素有序
TreeSet
底层是红黑树(自平衡二叉树)
排序依赖自然排序和比较器排序
Map接口Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value
Map和Set的关系比较密切,虽然Map中存放的是键值对,Set中存放的是单个对象,但如果把value看做key的附庸,key在哪里,value就在哪里,这样就可以像对待Set一样来对待Map。事实上,Map提供了一个Entry内部类来封装key-value对,在计算Entry存储时则只考虑Entry封装的key。
如果把Map集合里的所有value放在一起来看,他们又类似于一个List,元素可以重复,每个元素可以根据索引来找,只是Map中的索引不再是整数值,而是以另一个对象作为索引
概述将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
异同点Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的呃
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
内部类EntryMap中包括一个内部类Entry,该类封装一个键值对,常用方法
Object getKey():返回该Entry里包含的key值
Object getValue():返回该Entry里包含的value值
Object setValue(V value):设置该Entry里包含的value值,并设置新的value值
接口成员方法 V put(K key,V value)添加元素
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
V remove(Object key)根据键删除键值对元素,并把值返回
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()返回集合中的键值对的对数
V get(Object key)根据键获取值
Set获取集合中所有键的集合
Collection获取集合中所有值的集合
Set返回一个键值对的Set集合
Map集合遍历 方式1:根据键找值获取所有键的集合
遍历键的集合,获取到每一个键
根据键找值
方式2:根据键值对对象找键和值获取所有减值对对象Entry的集合
遍历键值对对象的集合,获取到每一个减值对对象
根据键值对对象找键和值
HashMap类 概述键是哈希表结构,可以保证键的唯一性
注意:当引用类型作为Key值的时候,要重写equals方法,理由与HashSet一致
linkedHashMap类 概述实现了Map接口,底层是依赖于哈希表和链表的,具有可预知的遍历顺序
哈希表保证唯一性,保证的是Key的唯一性
链表保证有序,保证的是键的有序(存储和取出顺序一致)
TreeMap类 概述键是红黑树结构,可以保证键的排序和唯一
用法参考TreeSet
注意:若将自建类对象存储进TreeMap需要实现comparable接口,重写compareTo方法
因为add()方法中需要用到compareTo方法来判断大小来进行树排序
自己根据类的情况,来分析主要条件次要条件,来返回0还是正负值
1、自然排序
自建类需实现comparable接口,并重写compareTo方法
2、比较器排序
在TreeMap的构造方法里用匿名内部类实现comparator接口,并重写compareTo方法
HashMap和Hashtable的区别1、相同点:他们存储的元素类型都是K-V格式的
2、不同点:
1.Hashtable是线程安全的;而HashMap不是线程安全的
2.Hashtable的key值和value的值都不允许为null;而HashMap可以



