1.java 容器都有哪些?
key:
Collection接口下的List,set,Queue和Map
其中Map是独立的不是在Collection接口下
Queue是队列
2.Collection 和 Collections 有什么区别?
key:
Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口,所有集合都是他的子类
Collections是一个包装类,包括很多静态方法,不能被实例化,就像一个工具类
3.List、Set、Map 之间的区别是什么?
key:
List:?1.允许重复对象 2.可以插入多个null 3.是一个有序容器,保持每个袁术的插入顺序,输出顺序就是插入的顺序? ? ?//常用的实现类有ArrayList,LinkedList和Vector。
set: 1.不允许重复对象 2.无序容器,无法保证每个元素的储存顺序 3.只允许一个null
//set最常用的实现类有 HashSet,LinkedHashSet以及TreeSet
Map:?1.Map的每个Entry都持有两个对象,一个为key一个为value即键跟值。Map可以有两个相同value但是key的对象是唯一的不会有重复的key
2.Map里可以有多个为null的value但是只能有一个为null的key
//Map里常用的实现类有HashMap.LinkedHashMap,Hashtable,TreeMap
4.HashMap 和 Hashtable 有什么区别?
key:
1.HashTable的方法是同步的,HashMap不能同步
2.HashTable是继承自Dictionaty类,而HashMap是继承自AbstractMap类
3.HashTable不允许null值,HashMap允许使用null值
5.如何决定使用 HashMap 还是 TreeMap?
key:
TreeMap的实现基于红黑树结构。适用于按自然顺序或自定义顺序遍历key(键)
HashMap的数据结构主要是桶(数组),链表或红黑树。适用雨在Map中插入,删除和定位元素
结论:如果你需要得到一个有序的结果就应该使用TreeMap。除此之外HashMap有更好的性能,所以不需要排序的时候HashMap
6.说一下 HashMap 的实现原理?
key:
Table数组初始长度:1<<4 2^4=16
Table数组最大长度:1<<30 2^30=1073741824
负载因子:0.75
链表树化阙值:8
红黑树链化阙值:6
最小树化阙值:64
7.说一下 HashSet 的实现原理?
key:
HashSet是基于HashMap实现的,默认构造函数的一个初始容量为16,负载因子为0.75的HashMap。封装一个HashMap对象储存所有的集合元素,所以放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value存储了一个Present,它是一个静态的Object对象
当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。
HashSet的其他操作都是基于HashMap的。
8.ArrayList 和 LinkedList 的区别是什么?
key:
1.ArrayList是动态数据的数据结构实现的,LinkedList是双向链表的数据结构实现的
2.ArrayList比LinledLIst随机访问效率要高,因为LinkedLsit是线性数据,需要从前往后依次查询
3.在增加和删除数据之外LinkedList的效率要比ArrayList效率要高,因为ArrayList每次更改增删会影响其他数据的下标
9.如何实现数组和 List 之间的转换?
方法一
public static void main(String[] args) {
String[] str = new String[]{"hello"};
ArrayLsit list = new ArrayList<String>();
//用for循环先遍历数组,再存入Lsit
for(String string : str){
list.add(string);
};
}
方法二
String[] str = new String[]{"hello"};
//直接使用asList方法将数组存入List
ArrayList list = new ArrayList<String>(Array.asList(str));
10.ArrayList 和 Vector 的区别是什么?
key:
ArrayList:线程不安全.线程不同步. 效率高.?
Vector: 线程安全. 线程同步. 效率低
11.Array 和 ArrayList 有何区别?
Array类型的变量在声明的同时必须实例化而ArrayList可以先声明不要立刻实例化
Array只能储存同构的数据而ArrayList课存储异构数据(即类型不相同的数据)
ArrayList的大小是动态的可以在原有的基础上增加空间
12.在 Queue 中 poll()和 remove()有什么区别?
poll()和remcve()都将在不移除的情况下返回头部,但是poll()在队列为空时返回null.而remove会抛出NoSuchElementException异常。
13.哪些集合类是线程安全的?
1.Vector
2.Hashtable
3.ConcurrentHashMap
4.Stack
14.迭代器 Iterator 是什么?
Iterator是可以遍历集合的对象,为各种容器提供接口.
缺点是迭代器需要跟集合成对生成,即没新增一个集合就需要一个新的迭代器生成
15.Iterator 怎么使用?有什么特点?
1.特点?
1.Iterator在遍历元素过程中,有线程修改集合元素会有ConcurrentModificationEception异常
2.Iteratir本身不具有装载数据的功能需要Collection对象使用
3.next()是用游标指向的方式返回下一个元素
?2.常用且简单的用法
public static <V> void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("程自豪");
list.add("夏红飞");
//获取迭代器
Iterator iterator = list.iterator();
while(iterator.hasNext()){
String name = (String) iterator.next();//强制转换类型
System.out.println(name+"sbbbb");
}
输出结果
?
?
16.Iterator 和 ListIterator 有什么区别?
1.Iterator可以应用于所有的集合,LIstIterator只能应用在List及List子类
2.ListIterator有hasPrevious()和previous()方法,可以实现反向遍历,这是Iterator做不到的
3.ListIterator可以实现对对象的修改,Iterator只能遍历
17.怎么确保一个集合不能被修改?
可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。
|