*集合
·集合使用来存储引用类型数据的容器
*Collection 集合
·存取数据时单个存取,可以迭代(顺序访问集合中的每一个元素并只访问一次)
·子接口List集合:有序可重复(存储数据和添加顺序一致)
·实现类ArrayList底层是数组,线程不安全
·实现类Vector底层是数组,是线程安全的
·实现类LinkedList底层是双向链表,访问不方便,添加删除效率高
·子接口Set集合:无序不可重复
·实现类HashSet
底层是HashMap,HashSet就是HashMap的键的集合
·实现类CopyOnWriteArraySet
·子接口SortSet
·可以对元素进行自然排序,要求集合中的元素必须是可比较的
·子接口NavigableSet
·实现类TreeSet
可以对集合的元素进行排序
·实现类ConcurrentSkipListSet
*Collection的常用操作
·add(E e)向集合中添加元素
·addAll(Collection<? extends E> c)把集合c中的所有元素都添加到当前集合中
·clear()删除集合中所有的元素
·contains(Object o)判断集合中是否包含指定的元素
·containsAll(Collection<?> c)当前集合是否包含集合c中的所有元素
·isEmpty()判断集合是否为空
·iterator()返回集合迭代器对象
·remove(Object o)在集合中删除第一个与o匹配的元素
·removeAll(Collection<?> c)把当前集合中出现在c集合中的元素都删除
·retainAll(Collection<?> c)删除当前集合中不在c中的元素
·size()返回元素的个数
·toArray()把集合转换为数组
*List集合
·有序,可重复
·List对每一个集合指定了一个索引值,增加了针对索引值的操作
*LinkedList
底层是双向链表
·单向链表
·单向链表由若干个节点组成,每个节点处了存储数据之外,还有一个指向下个节点的指针
·优点:插入/删除元素时不需要扩容也不需要复制移动元素,只需要修改一下指针
·缺点:如果想要查看指定节点前一个元素,需要重新从头开始
·双向链表
·双向链表由若干个节点组成,每个节点处了数据域之外,还有一个指针指向下一个节点的指针域,一个向上检点的指针域
·优点:插入/删除元素时不需要扩容也不需要复制移动元素,只需要修改一下指针
不仅可以从前往后寻找,也可以从后往前寻找
·新增的方法
·增加了针对头与尾的操作
·addFirst(E e) 把元素e添加到第一个
·addLast(E e) 把元素e添加到最后一个
·removeFirst(E e) 删除第一个元素
·removeLast(E e)删除最后一个元素
·peek()返回第一个元素
有时候也会使用Linkedlist模拟栈
·push(E e)模拟压栈,把元素e添加到列表的头部
·pop(E e)模拟出栈,把列表的第一个元素删除
·使用offer(E e),poll()模拟队列,队列特点先进先出
·offer(E e)模拟入队,把元素e的第一个元素删除
·poll()模拟出队,把列表的第一个元素删除
*Set集合
·无序不可重复
*HashSet
·HashSet底层是HashMap
·向HashSet中添加元素,实际上就是把该元素作为键添加到HashMap中
·HashSet就是HashMap键的集合
*TreeSet
·TreeSet实现了SortedSet接口,可以对元素自然排序,要求集合中的元素必须是可比较的
·在创建TreeSet是,可以指定Comparator比较器
·没有指定Compparator比较器,要求元素的类实现Comparable接口
·TreeSet底层是TreeMap
·向TreeSet添加元素,实际上是吧该元素作为键添加到了底层的TreeMap中
·TreeSet实际上就是TreeMap键的集合
·TreeSet要求元素必须是可比较
·首先看是否有Comparator比较器,如果没有在查找是否实现了COmparable接口
·一般情况下,类实现Comparable一个默认的比较规则,再使用Comparator定义很多不同的比较规则
·在TreeSet集合中,判断是否同一个对象是根据Comparator/comparable的比较结构是否为0判断是否可以添加,比较结构为0为同一个元素
*泛型
·泛型就是把数据类型作为参数传递
·在Comparator<>/Comparable<>接口中通过泛型指定比较元素的数据类型
·在Collection<>集合中,通过泛型指定存储元素的诗句类型
·泛型的好处
在编译时可以进行数据类型的检查
·注意
在集合泛型中,在定义集合时泛型才有作用
Collection<String> collection = new ArrayList<>();
约束Collection集合中只能存储String字符串,在赋值时,ArrayList后面的泛型不需要写,如果写只能和前面的泛型一致
*Collection工具类
·java.util.Collections 工具类提供了一些对Collection集合进行操作的方法
·Collections工具类有一组操作:synchronizedXXX(XXX)可以把XXX集合转换为线程安全的集合
Collection<T> synchronizedCollection(Collection<T> c)
static <T> list<T>synchronizedList(List<t> list)
static <K,V> Map<K,V> synchronizedMap(Map<k,V> m)
static <T> set<T> synchronizedSet(Set<T> s)
*Map集合
·是按<键,值>对的形式进行存取的<"list",18>
·子接口ConcurrentMap
·应用于对线程环境
·实现类ConcurrentHashMap
·子接口ConcurrentNavigableMap
·实现类ConcurrentSkipListMap
·子接口SortedMap
·根据键自然排序,要求键必须是可以比较的Compar/Comparable
·子接口NavigableMap
·子接口ConcurrentNavigableMap
·实现类TreeMap
·可以根据键自然排序,排序的原理是二叉树原理
·实现类HashMap
·底层是哈希表数列表
·实现类Hashtable
·底层也是哈希表,是线程安全的
·子类Propertie
·键与值都是String类型,常应用于设置\读取属性
*Map基本操作
·clear()清楚所有的<键,值>对
·containsKey(Object key)判断是否包含指定的键
·containsValue(Object value)判断是否包含指定的值
·entrySet()返回Entry的集合,一个<键,值>对就是一个Entry
·get(Object key)返回key对应的值
·isEmpty()判断是否为空
·keySet()返回键的集合
·put(K key, V value)向Map中添加<键,值>对,如果键已存在,使用value值替换原来的值
·remove(Object key)只要key匹配就删除对应的<键,值>对
·size()返回<键,值>对的数量
·values() 返回值得集合
*HashMap与HashTable
·底层都是哈希表(散列表),但是HashTable是线程安全的饿,HashMap不是线程安全的
·HashMap的父类是AbstractMap,HashTable的父类是Dictionary
·HashMap默认初始化容量:16,HashTable默认初始化容量:11
·加载因子 0.75 ——当<键,值>对的数量打与数组的容量(哈希桶的容量)*加载因子时,需要扩容
·HashMap两倍扩容,HashTable两倍+1;
·HashMap的键和值都可以为null,Hashtable的键和值都不可以为null
·HashMap可以指定初始化容量,系统会调整为大于该数的2的幂次方,为了快速计算数组下标
HashTable可以指定初始化容量,不扩容
*Properties
·继承了HashTable
·键和值都是String字符串
·常用与设置和读取系统的属性值
·经常把属性保存到配置文件中
·一般情况下会在当前工程创建一个资源包,在资源包中添加配置文件
·在src目录下,创建.properties
*TreeMap
·TreeMap实现了SortMap,可以根据键自然排序,排序原理是二叉树原理
·TreeMap中的键采用中序遍历,左子树-根-右子树
·TreeMap的键必须可比较