Map Set list 理解

 

 

对JAVA的集合的理解是想对于数组
  数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) 

  JAVA集合可以存储和操作数目不固定的一组数据。   所有的JAVA集合都位于 java.util包中!
  JAVA集合只能存放引用类型的的数据,不能存放基本数据类型.  

 JAVA集合主要分为三种类型:

        Set(集)  

        List(列表) 

        Map(映射)  

        Collection 接口

根据对象的特性为对象生成一个唯一标识符的方法
Object中HashCode()是hash的一个应用:拿对象的内存地址经过运算作为对象的唯一标识符
底层还是数组+单向链表
    我们把下标是字符串的数组叫关联数组
    数组的下标是一个字符串
无序可重复
Hash(哈希)
    根据对象的特性为对象生成一个唯一标识符的方法
    Object中HashCode()是hash的一个应用:拿对象的内存地址经过运算作为对象的唯一标识符
HashMap
    底层还是数组+单向链表
        我们把下标是字符串的数组叫关联数组
        数组的下标是一个字符串

 

 

Map集合
Map没有继承Collection接口。也就是说Map和Collection是2种不同的集合。Collection可以看作是(value)的集合,而Map可以看作是(key,value)的集合。
Map接口由Map的内容提供3种类型的集合视图,一组key集合,一组value集合,或者一组key-value映射关系的集合

Map接口
public interface Map
{
//
public static interface Entry
{
      public abstract Object getKey();
      public abstract Object getValue();
      public abstract Object setValue(Object obj);
      //...
}
//作用基本等同Collection接口的方法
public abstract int size();
public abstract boolean isEmpty();
public abstract boolean containsKey(Object obj);
public abstract boolean containsValue(Object obj);
public abstract Object get(Object obj);
public abstract Object put(Object obj, Object obj1);
public abstract Object remove(Object obj);
public abstract void clear();



//添加map里包含的所有元素
public abstract void putAll(Map map);
//key集合
public abstract Set keySet();
//value集合
public abstract Collection values();
//key-value映射关系的集合Set<Entry>
public abstract Set entrySet();
//...
}

 

无序不可重复
    HashMap:键的部分
SortedSet
    红黑树
HashSet
    HashTable
Set
    无序不可重复
        HashMap:键的部分
    HashSet
        HashTable
    SortedSet
        红黑树

 

Set集合
Set继承自Collection接口。Set是一种不能包含有重复元素的集合,即对于满足e1.equals(e2)条件的e1与e2对象元素,不能同时存在于同一个Set集合里,换句话说,Set集合里任意两个元素e1和e2都满足e1.equals(e2)==false条件,Set最多有一个null元素。
因为Set的这个制约,在使用Set集合的时候,应该注意:
1,为Set集合里的元素的实现类实现一个有效的equals(Object)方法。
2,对Set的构造函数,传入的Collection参数不能包含重复的元素。

Set接口里定义的方法与Collection基本一样,这里不再重述。

 

 

有序可重复
ArrayList
    底层是一个索引数组
    有序:靠索引数组的下标
List
    有序可重复
    ArrayList
        底层是一个索引数组
        有序:靠索引数组的下标
    LinkedList
        底层是一个链表

       有序:靠链表的先后维持

 

List集合
List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。
跟Set集合不同的是,List允许有重复元素。对于满足e1.equals(e2)条件的e1与e2对象元素,可以同时存在于List集合中。当然,也有List的实现类不允许重复元素的存在。
同时,List还提供一个listIterator()方法,返回一个ListIterator接口对象,和Iterator接口相比,ListIterator添加元素的添加,删除,和设定等方法,还能向前或向后遍历。

List接口添加的主要方法有:
public interface List
extends Collection
{
//... other Collection methods

//根据索引取得元素
public abstract Object get(int i);
//在指定位置(索引)处插入新的元素
public abstract Object set(int i, Object obj);
//在List的尾部插入新的元素
public abstract void add(int i, Object obj);
//删除指定位置(索引)处的元素
public abstract Object remove(int i);
//取得指定对象的最开始的索引位置
public abstract int indexOf(Object obj);
//取得指定对象的最后的索引位置
public abstract int lastIndexOf(Object obj);
//List提供的新的遍历方法
public abstract ListIterator listIterator();
//从指定位置i处开始迭代。最初next()方法返回的将是位置i处的元素。
public abstract ListIterator listIterator(int i);
//取得从位置i到j的所有元素(包含i但不包含j位置的元素),返回一个新的集合对象。
public abstract List subList(int i, int j);
}


   

集合的遍历:
所有java.util.Collection的实现类必须实现
public abstract Iterator iterator();
方法以支持对所包含的对象进行遍历。

java.util.Iterator
+--java.util.ListIterator

Iterator接口:
public interface Iterator
{
//判断是否存在下一个元素
public abstract boolean hasNext();
//返回下一个可用的元素
public abstract Object next();
//移除当前元素
public abstract void remove();
}



ListIterator接口:
public interface ListIterator
extends Iterator
{
//other methods defined in Iterator

//判断是否存在上一个元素
public abstract boolean hasPrevious();
//返回上一个可用的元素
public abstract Object previous();
//取得下一个可用元素的索引位置
public abstract int nextIndex();
//取得上一个可用元素的索引位置
public abstract int previousIndex();
//替换当前位置的元素
public abstract void set(Object obj);
//在当前位置插入新元素
public abstract void add(Object obj);
}
接口类图关系

 

转载于:https://www.cnblogs.com/lianggnail/p/4685081.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值