18.java 容器都有哪些?
数组,String, java.util下的集合容器
数组长度限制为integer.integer.MAX_VALUE;
String的长度限制:底层是char数组,长度Integer.MAX_VALUE
java.util下的集合容器
Collection
- set
- HashSet
- LinkedHashSet
- TreeSet
- list
- ArrayList
- LinkedList
- Vector
Map
- HashMap
- LinkedHashMap
- HashTable
- TreeMap
19.Collection 和 Collections 有什么区别?
Collection是集合的接口
Collections是集合的工具类
20.List、Set、Map 之间的区别是什么?
List的元素以线性方式存储,可以存放重复对象
Set中的对象不按照特定的方式排序,没有重复的对象
Map存放的是键值对,每个元素都有一个键对象和值对象
21.HashMap 和 Hashtable 有什么区别?
HashMap HashTable
非线程安全 线程安全
允许空键值对
继承自Dictionary类 Map interface的实现
22.如何决定使用 HashMap 还是 TreeMap?
TreeMap的Key值是要求实现java.lang.Comparable,默认按照key值升序排列的,TreeMap的实现基于红黑树结构
HashMap的Key值实现散列hashCode(),分布是散列的均匀分布,不支持排序,数据结构主要使数组,链表或者红黑树
查询的时候用HashMap,增加,快速创建的时候用TreeMap
需要排序就是用TreeMap,不需要就使用HashMap
23.说一下 HashMap 的实现原理?
HashMap基于hashing原理,通过put()和get()存储和获取对象,当我们把键值传递给put方法时,调用键对象的
hashCode()方法计算hashcode,然后找到位置存贮值对象,获取对象时,同通过键对象的equal()方法找到正确的键值,
返回值对象,hashcode采用链表来解决碰撞问题,如果发生碰撞,对象会储存在链表的下一个节点中,HashMap在每个链表 节点中存储键值对象
24.说一下 HashSet 的实现原理?
HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为PRESENT
25.ArrayList 和 LinkedList 的区别是什么?
ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构
对于随机访问get和set,ArrayList优于LinkedList
对于新增或删除操作,LinkedList比较占优势
26.如何实现数组和 List 之间的转换?
List转为数组 : toArray(arraylist.size())
数组转换为List : asList(a)
27.ArrayList 和 Vector 的区别是什么?
ArrayList是非线程同步的,Vector是线程同步的,如果不考虑线程安全的情况下ArrayList效率较高
ArrayList存储的元素超过他的初始化大小的时候增长量是50%,Vector是100%,大批量数据存储Vector效率高一些
28.Array 和 ArrayList 有何区别?
Array效率高,但是容量固定且无法动态改变
ArrayList容量可动态增长,但是牺牲效率
ArrayList相当于一个可以增长的Array
29.在 Queue 中 poll()和 remove()有什么区别?
相同点:都是返回一个元素,并在队列中删除返回的对象
不同点:如果没有元素pool()会返回一个null,而remove()会抛出一个NoSuchElementException异常
30.哪些集合类是线程安全的?
Vector, HashTable, stack
31.迭代器 Iterator 是什么?
为了方便处理集合中的元素,java中设置了一个对象,提供了一些方法专门处理集合中的元素。对Collection进行迭代的类,称为迭代器
32.Iterator 怎么使用?有什么特点?
.hasNext()判断是否有下一个元素
next() 下一个元素
remove() 删除迭代器返回的最后一个元素
forEachRemaining() 遍历所有元素
特点: **Iterator遍历集合元素过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationException异常
遍历过程中可以通过remove移除集合中的元素
Iterator必须依附在某个Collection对象而存在,本身无装载数据对象的功能
remove方法移除的是上一次next方法返回的对象
next()通过游标指向的形式返回Iterator下一个元素
33.Iterator 和 ListIterator 有什么区别?
ListIterator 继承 Iterator
ListIterator 比Iterator方法多
add() 将指定元素插入列表
set() 迭代器返回的最后一个元素替换参数e
hasPrevious() 迭代器当前的位置,反向遍历集合是否含有元素
previous() 迭代器当前位置,反向遍历集合,下一个元素
previousIndex() 迭代器当前位置,反向遍历集合, 返回下一个元素的坐标
nextIndex() 迭代器当前的位置,返回下一个元素的下标
Iterator适用所有集合,ListIterator只能用于List及其子类
ListIterator可以add对象
ListIterator可以反向遍历
ListIterator可以定位当前索引位置
ListIterator可以实现对list的修改,Iterator只能遍历,无法修改
34.怎么确保一个集合不能被修改?
java.util.Collection类中的 unmodifiable**方法赋值原集合
例如:
static List<String> list = new ArrayList<String>();
list = Collection.unmodifiableList(list);