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
存储结构:哈希表(数组+链表+红黑树)
源码分析总结
-
HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16
-
当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的二倍。目的是减少调整元素的个数
-
jdk1.8 当每个链表长度大于8,并且数组元素个数大于等于64时,会调整为红黑树,目的提高执行效率
-
jdk1.8 当链表长度小于6时,调整成链表
-
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类
-

浙公网安备 33010602011771号