目录
List和Set的顶层接口,都是Collection
一、List集合
1.概念
ArrayList就是一个动态的数组,LinkedList基于链表的存储结构
2.特点
1)ArrayList查询快、增删慢
2)LinkedList查询慢、增删快
3.要点
List集合是有序的,且元素可以重复
4.List 接口有三个实现类:
List接口有 ArrayList(基于动态数组数据结构的实现),LinkedList(基于链表数据结构的实现),Vector
形式:List list = new ArrayList();
1)ArrayList
基于动态数组数据结构的实现,底层使⽤ Object[ ]存储,适⽤于频繁的查找⼯作,线程不安全。
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程不安全,效率高。
2)LinkedList
基于链表数据结构的实现
优点:底层数据结构是链表,查询慢,增删块。
缺点:线程不安全,效率高。
3)Vector
是 List 的古⽼实现类,底层使⽤ Object[ ]存储,线程安全的。
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程安全,效率低。
5.遍历List集合三种方法:
1)for循环遍历
2)for-each循环遍历
3)迭代器遍历,Iterator和ListIterator迭代器。
public class Text {
public statie vold main(String[] args) {
//有序可重复
List<String> List=new ArrayList<>();
List.add("一");
List.add("二");
List.add("三");
List.add("四");
System.out.println(List);//查询List全部内容
System.out.println(List.get(2));
//查询第二个数据内容
System.out.println("List通历----------);
//for(int i=0;i<List.size();i++){
// String s=List.get(1);
// System.out.println(s);
// }方法名点F
//一个一个查询
for(String s:List){//循环遍历
Systen.out.println(s);
}
System.out.println(---------------");
};
};
二、Set集合
1.概念
1)Set集合它所存储的元素是不可重复的,并且元素都是无序的
2)Set集合不能直接获取某个元素,只能通过迭代器遍历元素。
3)通俗的理解为小学生的书包,直接把元素扔进去,是没有任何顺序的,所以元素不能重复。
2.Set 接口有三个实现类:
1)
HashSet(
无序,唯一)
(1)底层数据结构是哈希表,无序且不允许有重复值,增删快;依赖方法 hashCode() 和 equals()。
(2)HashSet 添加元素的执行顺序:首先判断 hashCode() 值是否相同;若相同则继续执行 equals(),若其返回值是 True 说明元素重复,不添加,是 False 就直接添加到集合;若不同就直接添加到集合。
2)
LinkedHashSet
HashSet 的子类,继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层数据结构是链表和哈希表,使用的是 LinkedHashMap,由链表保证元素有序,哈希表保证元素唯一。
3)
TreeSet(有序,唯一)
底层数据结构是红黑树,以升序对对象进行排序,TreeSet 类使用了一个 TreeMap。
3.用途
-
TreeSet主要功能用于排序
-
LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)
-
HashSet只是通过的存储数据的集合。
4.遍历Set集合三种方法:
1)for-each循环遍历
2)迭代器遍历
public class Text {
public statie vold main(String[] args) {
//无序 不重复
Set<String>set=new HashSet<();
set.add("一");
set,add("二");
set.add("三");
set.add("四");
System.out.println(set);
System.out.println("遍历集合------------“);
Iterator<String>iterator =set.iterator();//迭代器遍历
while (iterator.hasNext0)){
String s=iterator.next();//一个一个拿出
System.out.println(s);}
};
};
三、Map集合
1.定义
基于键值对形势存储的数据结构; 在Map中key是不允许重复的,value值是可以重复。
Map会把所有的key存放一个set集合中。按定义,该接口描述了 从不重复的键到可重复的值 的映射。
2.Map 接口有四个实现类:
HashMap
:底层数据结构是哈希表,支持 null 值和 null 键,效率高,线程不安全。LinkedHashMap
:HashMap 子类,底层数据结构是链表和哈希表,由链表保证元素有序,哈希表保证元素唯一。保存了记录的插入顺序。TreeMap
:底层数据结构是红黑树,能够把它保存的记录根据键排序,默认是键值的升序排序。HashTable
:底层数据结构是哈希表,不支持 null 值和 null 键,效率低,线程安全。
3.HashMap 和 HashTable 区别
- HashMap 是线程不安全的,HashMap 是 Map 的一个子接口,通过键的映射得到值,不允许键重复,允许空键和空值,由于非线程安全,HashMap 的效率要较 HashTable 的效率高一些;
- HashTable 是线程安全的集合,不允许空键或空值;HashTable 被多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步。
4.区别
- HashTable是线程安全的,HashMap不是线程安全的。
- HashMap效率较高,HashTable效率较低。
- HashTable不允许null值,HashMap允许null值(key和value都可)
- 父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap。
public class Text {
public statie vold main(String[] args) {
Map<String.0bject>map=new HashMapo();//无序
map. put("name", "Li");
map.put("age","20");
map.put("sex",“男");
System.out.println(map);
System.out.println("nap追历----");
Set<String>kevSet=map.keySet()://获取map中的所以,kev值和Sst集合
Iterator<String> iterator1 =keySet.iterator();
while(iterator1.hasNext()){
String key=iterator1.next()://获取key值
Object value=map.get(key);//获职valve值 System.out.println(key+"..--.-"+value);
};
};