1.java里的集合有哪些,区别在哪
java所有的类都归于java.util包下,主要有两个接口派生出来,分别是Collection和Map.Collection,包含了List和Ser两大分支。Map作为一个映射接口。Set,Map,List可以看做集合三大类,遍历集合的工具有lterator和Enumeration;Arrays和Collection是操作数组集合的两个工具类。
- list列表:有序的,可重复的
- ArrayList 数组列表:使用数组实现
- LinkedList双向链表:顺序读取效率高,随机读取效率低
- Vector向量:线程安全的数组列表,同一时间只有一个线程访问,但性能低
- Stack栈:继承自Vector,线程安全,后进先出
- ArrayQueue数组队列:先进后出
- queue队列:有序的,可重复的
- ArrayDeque 数组实现的双端队列,可在两端插入删除元素
- LinkedList 双向链表
- PriorityQueue优先队列,数组实现的二叉树,完全二叉树实现的小顶堆
- set集合:不可重复
- HashSet:基于HashMap实现的集合,对HashMap做了一些封装,与HashMap不同的是对元素的保存为链表形式。
- LinkedHashSet 链表集合:继承自HashSet与LinkedHashMap相似,是对其的封装
- TreeSet 红黑树集合:与TreeMap相似是对其的封装
- map映射:无序的,键唯一值不唯一
- HashMap 哈希映射/字典,键值对应数据,可为null
- TreeMAp 红黑树实现的key-value融合,可排序,自平衡二叉树
- LinkedHashMap 链表映射:继承了HashMap的所有特性,又实现了双向链表,保留元素的插入顺序。
比较:
2.hashmap和hashtable的区别
相同:都是双列集合,底层都是hash算法
不同:
HashMap | HashTable |
---|---|
线程不安全 | 线程安全 |
效率高 | 效率低 |
可存储null | 不可存储null |
侧重hash算法效率 | 侧重减少hash冲突 |
初始容量和扩充容量大小不同:
- HashMap :初始大小11,扩充大小2n+1
- HashTable :初始大小16,扩充大小:原空间大小*2
实例
public class testHashtable {
public static void main(String []args){
HashMap<String,Integer> hm=new HashMap<>();
hm.put(null,1);
hm.put("张三",null);
System.out.println(hm);
Hashtable<String,Integer> ht=new Hashtable<>();
ht.put(null,8);
ht.put("张三",null);
System.out.println(ht);
}
}
3.equal和==的区别:
equal | == |
---|---|
方法 | 运算符 |
比较值 | 比较内存地址 |
注意:
- java基本类型只能用==(short,int,long,byte, char, float, double, boolean)
- 比较对象(包装类型)需要用equal
- 比较string类型见参考链接:equal与==的区别