java容器

1. 作用:保存对象,虽然数组是保存一组对象的有效方式,但是数组具有固定的大小。容器类可以自动的调整自己的尺寸。

2.

LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。

ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。

HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。

HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。


3.Queue和List有两个区别:前者有“队头”的概念,取元素、移除元素、均为对“队头”的操作(通常但不总是FIFO,即先进先出),而后者只有在插入时需要保证在尾部进行;前者对元素的一些同一种操作提供了两种方法,在特定情况下抛异常/返回特殊值——add()/offer()、remove()/poll()、element()/peek()。不难想到,在所谓的两种方法中,抛异常的方法完全可以通过包装不抛异常的方法来实现,这也是AbstractQueue所做的。


4. Map底层实现:数组+链表

public class MyMap {  
    MyEntry[] arr = new MyEntry[100];  
    int size;  
    /** 
     * 采用hash算法实现map,(每个对象都有一个地址, 
     * 根据地址生成的一个hash码,由于每个对象的地址都不一样,所以 
     * 生成的hash码是唯一的) 
     * @param key 
     * @param value 
     */  
    public void put(Object key, Object value){  
        MyEntry my = new MyEntry(key, value);  
        //相当于地址映射函数,但是会产生地址映射冲突  
        int a = (key.hashCode()%100);  
        //思路一:当地址冲突时,采用开放地址法处理冲突  
        while(arr[a].key != null){  
            a++;  
        }  
        arr[a] = my;  
        /*思路二:当地址冲突时,采用链表法处理冲突-->这也是Java采用的设计思想, 
        数组加链表(即每个数组元素里面放一个链表)*/  
        //第一步:申请一个每个元素是链表的数组  
        MapLinkedList[] map = new MapLinkedList[999];  
        //第二步:添加元素  
        if(map[a] == null){  
            MapLinkedList list = new MapLinkedList();  
            list.add(e);  
            map[a] = list;  
        }else{  
            map[a].add(e);  
        }  
    }  
      
    public Object get(Object key){  
        int a = (key.hashCode()%100);  
        return arr[a].value;  
    }  
}  
  
class MyEntry{  
    Object key;  
    Object value;  
    public MyEntry(Object key, Object value) {  
        super();  
        this.key = key;  
        this.value = value;  
    }  
      
}  

6. hashSet的底层实现为hashMap,对象相同则hashcode相同,所以hashset能保持唯一性


7.  collection的功能方法

boolean add() ; boolean addAll();  Iterator iterator();  boolean remove();  int size();  Object[]  toArray();  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值