Day09:JAVA集合下

Day09:JAVA集合下

TreeSet

  • 基于排列顺序实现元素不重复

  • 实现了SortedSet接口,对集合元素自动排序

  • 元素对象的类型必须实现Comparable接口,指定排序规则

  • 通过compareTo方法确定是否为重复元素,返回值为0则为同一元素

红黑树:在二叉查找树的基础上加上节点颜色,保持平衡用

二叉查找树:左边节点比右边节点小

Comparator接口:通常用匿名内部类的方法来实现,重写compare方法即可,如:

TreeSet<Test> tests = new TreeSet<>(new Comparator<Test>(){

@Override

public int compare(Test t1,Test t2){

int t1 = t1.getAge()-t2.getAge();

int t2 = t1.getName().compareTo(t2.getName());

return t1==0?t2:t1;

}

})

Map取代Ditionary

HashSet里面用的是HashMap

集合转换为数组的方法:toArray(new array[length])

数组转换为集合的方法:Arrays.asList(array);数组转换成的集合为受限集合,不能进行添加和删除;基本类型数组需要用其包装类数组

重写compareTo方法

public int compareTo(Test t){

int n1 = this.getName().compareTo(t.getName());

int n2 = this.age - t.age;

return n1==0?n2:n1;

}

Map

族谱

interface:Map -》Class HashMap | interface SortedMap

interface SortedMap -》 Class TreeMap

特点

键值对:键和值都是无序的,适合用Set

但是键是唯一的,值是可重复的

方法

V put(K key,V value) //将对象存入到集合中,关联键值。key重复则覆盖原值

Object get(Object key) //根据键获取对应的值

Set<K> keySet() //返回所有key

Collection<V> values() //返回包含所有值的Collection集合

Set<Map.Entry<K,V>> entrySet() //键值匹配的Set集合

size()

toString()

remove(Object key)

containsKey()

containsValue()

clear()

Entry类

getKey()

getValue()

使用Entry类来遍历Map:

for(Map.Entry<KeyTest,ValueTest> entry:map.entrySet()){

System.out.println(entry.getKey()+":"+entry.getValue());

}

HashMap

jdk1.2

线程不安全,运行效率快

允许key和value的值为null

存储结构:哈希表(数组+链表+红黑树)

源码分析总结

  1. HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16

  2. 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的二倍。目的是减少调整元素的个数

  3. jdk1.8 当每个链表长度大于8,并且数组元素个数大于等于64时,会调整为红黑树,目的提高执行效率

  4. jdk1.8 当链表长度小于6时,调整成链表

  5. jdk1.8以前,链表是头插入,jdk1.8以后是尾插入

Hashtable和Properties

Hashtable

jdk1.0

线程安全,运行效率慢

不允许null作为key和value的值

Properties

Hashtable的子类

要求key和value都是String

通常用于配置文件的读取

代码中主要用于

TreeMap

可以对key进行自动排序

TreeSet源码中用的是TreeMap

Collections工具类

public static void reverse(List<?> list) //反转集合元素

public static void shuffle(List<?> list) //打乱集合元素

public static void sort(List<?> list) //升序排序集合元素,集合元素必须实现Comparable接口

binarySearch(List<?> list,Object o) //o为集合元素,返回值为元素o所在下标

copy(dest,source) //把集合source复制到集合dest里面去

JAVA IO前瞻

  • 流分类

  • 字节流

  • 编码方式

  • 字符流

  • File类

  •  

posted @ 2021-06-02 23:01  Layman52  阅读(42)  评论(0)    收藏  举报