集合

集合

 集合

1、Collection框架中实现比较要实现什么接口

comparable/comparator

 

2、ArrayList和Vector的区别

这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素ArrayList与Vector的区别,这主要包括两个方面

同步性:Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。

数据增长:ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,Vector增长原来的一倍,可以设置增长空间的大小。ArrayList增加原来的0.5倍,没有提供增长空间大小的方法。

 

3、HashMap(数组+链表+红黑树)和Hashtable的区别,线程安全的hashmap

历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的,效率高。在一个线程访问集合的情况下使用HashMap,在多个线程访问同一个集合是使用Hashtable。

值:HashMap的key 和value可以是null,Hashtable不行

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解

线程安全的hashmap:

方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的.

方法二:java.util.concurrent.ConcurrentHashMap

 

4、没有有顺序的 Map 实现类, 如果有他们是怎么保证有序的。

TreeMap和LinkedHashMap是有序的(TreeMap默认升序,LinkedHashMap则记录了插入顺序)

 

5、List和 Map区别?

一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

 

6、List, Set, Map是否继承自Collection接口?

List,Set是,Map不是

 

7、说出ArrayList,Vector,LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差

而LinkedList使用双向链表实现存储,所以查找数据慢插入数据快。LinkedList也是线程不安全的

 

8、去掉一个Vector集合中重复的元素

HashSet set = new HashSet(vector);

 

9、Collection和 Collections的区别

Collection是集合类的上级接口,继承与他的接口主要有Set和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

10、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。

 

11、两个对象值相同(x.equals(y) ==true),但却可有不同的hash code,这句话对不对?

对。如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。

如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。

 

12、java两个list中保存bean对象,找出其中某一属性不同的元素

public class person {
    private int id;
    private String name;
public person(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { // TODO Auto-generated method stub return "id:"+id+","+"name:"+name+" "; } @Override public boolean equals(Object obj) { if(name.equals(((person)obj).getName())) return true;//这里以name为判定标准。 else { return false; } } @Override public int hashCode() { return name.hashCode(); } } private static void getDifferentPart2(List<person> l1, List<person> l2) { for(person a : l1){ if(l2.contains(a)){ System.out.println("ok!!!"); } } }