List和map相关的面试题

1.Collection 与 Map
简介:
Collection 每个位置只有一个元素,旗下分为两个门派:List和Set
–List:ArrayList,LinkedList,Vector
–Set:HashSet / TreeSet
Collection、List、Set都是接口,不能实例化。
继承自它们的 ArrayList, Vector是具象class,这些才可被实例化。
Map(key,value)也是一个接口,不能实例化,继承它的是
–HashMap
– HashTable
– TreeMap
Collection:
(1)

  	List<String> list = new ArrayList<String>();
	   list.add("1");
	list.add("2");
	System.out.println(list);
	输出结果:
	[1, 2]

(2)遍历List

	Iterator<String> iterator = list.iterator();
	System.out.println(iterator);
	while(iterator.hasNext()){
		System.out.println(iterator.next());
	}
	遍历结果:
	1
	2

剩余LinkedList,Vector与ArrayList的操作方式一样,不再粘贴代码

Set:

  Set<String> set = new HashSet<String>();
	   set.add("1");
	   set.add("2");
	   set.add("3");
	   System.out.println(set);
   输出结果:
   [3, 2, 1](注意此时的输出结果与上面list的输出结果,刚好是相反的状态)
  遍历方式:
   Iterator iter = set.iterator();   
   while(iter.hasNext()){   
       String value = (String)iter.next();   
       System.out.println(value);   
   }
   输出结果:
   3
   2
   1

Map:’

  Map<String,Object> map = new HashMap<>();
    map.put("name", "zhangsan");
    map.put("age", 12);
    System.out.println(map);
    System.out.println(map.get("name"));
      输出结果:
    {age=12, name=zhangsan}
    zhangsan

结论:最常用的是ArrayList,HashSet,HashMap
面试经常问的问题:
说一下
list,set,map它们之间的区别和联系

  1. 在各种Lists中,最好的做法是以ArrayList作为缺省选择(查找用这个好使)。
  2. 当插入、删除频繁时,使用LinkedList();当插入、删除频繁时,使用LinkedList();
  3. Vector总是比ArrayList慢,所以要尽量避免使用。
  4. 在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
  5. TreeSet存在的唯一理由:能够维护其内元素的排序状态。
  6. 在各种Maps中, HashMap用于快速查找。
    各自的特点:(经常被问到)
    set集合中的数据不允许有重复;
    ArrayList和LinkedList有什么区别?
    ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
    ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。

相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。

LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

HashMap和Hashtable有什么区别?
HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
一般认为Hashtable是一个遗留的类。

Java中的HashMap的工作原理是什么?
Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。

扫描二维码关注公众号,回复: 5008589 查看本文章

HastSet和HashMap的区别是什么?
HashSet不允许有重复的数据;
HashMap不允许有重复的key,value是可以重复的,key相同时,value会更新

HashSet HashMap
实现Set接口 实现了Map接口
仅存储对象 存储键值对
调用add()方法向Set中添加元素 调用put()向map中添加元素
HashSet较HashMap来说比较慢 HashMap相对于HashSet较快

HashMap相对于HashSet较快的原因是:
慢原因是因为hashset的底层是对HashMap的封装!他们计算value的方式都是一样的!

还有最后一个问题,就是HashSet的底层是HashMap,TreeSet的底层是TreeMap,他们之间到底有怎样的区别和联系,为什么TreeSet存在的唯一理由:能够维护其内元素的排序状态。 等我改天分析(累死了)!
详解等下一篇文章:set的子类和map子类的区别和联系!

猜你喜欢

转载自blog.csdn.net/weixin_39638459/article/details/85927306