java基础__集合

 

有序否

允许元素重复否

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value来映射和存储数据,Key必须惟一,value可以重复

HashMap

TreeMap

是(用二叉树排序)


1.Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
   A:Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。

2.
Q:大致讲解java集合的体系结构
   A:List、Set、Map是这个集合体系中最主要的三个接口。
      其中List和Set继承自Collection接口。
      Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
      List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
      Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
      SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

3.Q:Comparable和Comparator区别
    A:调用java.util.Collections.sort(List list)方法来进行排序的时候,List内的Object都必须实现了Comparable接口。
        java.util.Collections.sort(List list,Comparator c),可以临时声明一个Comparator 来实现排序。
        Collections.sort(imageList, new Comparator() {
            public int compare(Object a, Object b) {
                int orderA = Integer.parseInt( ( (Image) a).getSequence());
                int orderB = Integer.parseInt( ( (Image) b).getSequence());
                return orderA - orderB;
           }
        });
        如果需要改变排列顺序
        改成return orderb - orderA 即可。

4.Q:hascode 跟equal  的区别

  
首先说明一下==,对对象来说,==比较的是对象的物理地址,即如果两个对象相等,他们一定是一个对象。        
== 比较的是对象的地址, 如果需要比较对象的值,就需要equal方法了。

相等的对象(equal)一定要存储在同一个位置(hashcode)

一致性,多次调用同一对象,返回的hashcode应该是一样的    

2)两个对象equal,一定要有相同的hashcode
3) 两个不equal的对象,不需要一定不同的hashcode    

equal,必须有相同的hashcode;有相同的hashcode,并不一定equal



ArrayList提供了根据下标或者指定对象两种方式的删除功能。如下:

Java代码 复制代码   收藏代码
  1. // 移除此列表中指定位置上的元素。  
  2. public E remove(int index) {  
  3.     RangeCheck(index);  
  4.   
  5.     modCount++;  
  6.     E oldValue = (E) elementData[index];  
  7.   
  8.     int numMoved = size - index - 1;  
  9.     if (numMoved > 0)  
  10.         System.arraycopy(elementData, index+1, elementData, index, numMoved);  
  11.     elementData[--size] = null// Let gc do its work  
  12.   
  13.     return oldValue;  
  14. }  
<span style="font-size:18px;">// 移除此列表中指定位置上的元素。
public E remove(int index) {
    RangeCheck(index);

    modCount++;
    E oldValue = (E) elementData[index];

    int numMoved = size - index - 1;
    if (numMoved > 0)
        System.arraycopy(elementData, index+1, elementData, index, numMoved);
    elementData[--size] = null; // Let gc do its work

    return oldValue;
}</span>
Java代码 复制代码   收藏代码
  1. // 移除此列表中首次出现的指定元素(如果存在)。这是应为ArrayList中允许存放重复的元素。  
  2. public boolean remove(Object o) {  
  3.     // 由于ArrayList中允许存放null,因此下面通过两种情况来分别处理。  
  4.     if (o == null) {  
  5.         for (int index = 0; index < size; index++)  
  6.             if (elementData[index] == null) {  
  7.                 // 类似remove(int index),移除列表中指定位置上的元素。  
  8.                 fastRemove(index);  
  9.                 return true;  
  10.             }  
  11. else {  
  12.     for (int index = 0; index < size; index++)  
  13.         if (o.equals(elementData[index])) {  
  14.             fastRemove(index);  
  15.             return true;  
  16.         }  
  17.     }  
  18.     return false;  
  19. }  


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值