请讲下Java里面的容器
分两大类,Map和Collection。而Collection又有子接口List(数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性)
Map是存储键值对的,里面的健不可以重复,但值可以重复
a. 对于List主要有ArrayList和LinkedList两种实现。实现的数据结构不同,所以主要的区别也都是和数据结构相关的。 ArrayList基于数组,随机访问快,而对于中间元素的插入删除效率比较低,而且需要考虑扩容问题。LinkedList,则 基于链表,和ArrayList提到的正相反,随机访问慢,但对于中间元素的插入和删除更有效率。
Set也是一种Collection,和List比起来主要体现在元素唯一性。
请说下Iterator的作用
迭代器可以实现Collection接口的方法,可以一个一个地获取集合中的元素
在遍历集合时 可判断是否有下一个元素
说下ArrayList和LinkedList的区别和联系,并说明什么情况下用它们
区别:ArrayList用于对象的随机访问速度快,没有顺序
LinkedList实现机制是链表式的,和顺序有关,速度比ArrayList慢
联系:ArrayList和LinkedList都是List接口的实现类
当要快速获取一个值时,用ArrayList,用于顺序插入操作时,用LinkedList.
说下List,Set,Map三种集合各有什么特征
List集合中的元素可以重复,
Set集合中的元素不可以重复
Map集合用键-值映射存放对象,Map容器中的键对象不能重复,值对象可以重复
HashSet和TreeSet有什么区别,什么时候用它们
区别:HashSet中的元素不能重复,没有顺序
TreeSet中的元素不能重复,但有顺序
当集合中的元素需要排序时,用TreeSet
一般情况下用HashSet,因为不需要排序,速度比TreeSet快
什么是泛型,怎么使用的,有什么好处?
答案
定义一个集合时,可以知道里面定义的是什么类型
使用:在集合类型后面加< 数据类型 >
使用泛型后,从集合中取得元素后就不用再用强转
什么是for each循环,它可以循环那些数据类型
答案
也可以叫增强型循环,通过对象拿到集合里的值,因为扩展性比较强,建议多使用
可以用来循环集合和数组
比较下集合和数组的优缺点
集合是多个对象的容器,可以将不同数据类型的多个对象组织在一起
数组类型是有相同数据类型的数据集合,数组是很多语言都支持的底层数据结构,性能上是最高的
HashMap与LinkedHashMap,和TreeMap的区别。
共同点:HashMap,LinkedHashMap,TreeMap都属于Map的实现类.
不同点: 1.HashMap里面存入的键值对在取出的时候是随机的,
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
- LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.
在List里面怎么去掉重复的数?
通过把List里面的数据放入HashSet可以去除重复
HashMap和ArrayList是不是都是线程不安全的?
ArrayList是线程不安全的;HashMap是线程不安全的;还有我们常见的一些JAVA集合都是线程不安全,这样做是为了提高性能
在JDK5以后提供了线程安全的并发包java.util.concurrent并发包,譬如里面的类CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap等
ArrayList集合加入1万条数据,应该怎么提高效率
因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能