Java中常用容器总结

1、Collection接口

数据都是单个单个的存储在其中的。

常用方法:

      boolean   add(Object element)           添加元素

      boolean   remove(Object element)       删除元素

      boolean   contains(Object element)          查找该元素,没有返回false,有则返回位置。

      int   size()                   返回容器大小。

      boolean   isEmpty()              是否为空的。

      void    clear()                 清空容器。

      Iterator   interator()                获取迭代器。

      boolean    containsAll(Collection  c)        是否包含c容器中所有元素。

      boolean    addAll(Collection c)           把c中的所有元素加到此容器中。

      boolean    remove(Collection  c)           移除本容器和c都有的元素。

      boolean    retainAll(Collection  c)          留下和c的交集。

      Object []    toObject()                转化成Object数组。

1.1 List接口

继承了Collection接口,有序!可以通过索引进行操作。(有序指的是存放顺序与放入顺序一致)

常用方法:

      void   add(int index ,Object e)        在指定位置插入元素。

      Object    set(int index , Object  e)        修改指定位置元素。

      Object    get(int index)            获取指定位置元素。

      Object    remove(int index);         删除指定位置元素。

      int   indexOf(Object  o)           返回该元素第一次出现的位置。

      int   lastIndexOf(Object   o)         返回该元素最后一次出现的位置。

实现类:

      ArryList        内部使用一个会自己扩容的数组实现,查询效率高,增删效率低,线程不安全。

      LinkedList    内部使用双向链表实现,查询效率低,增删效率高,线程不安全。

      Vector     使用数组实现的,它相关方法增加了同步检查,线程安全!

1.2 Set接口

继承了Collection接口,元素不能重复,无序。(无序指的是存放顺序与放入顺序不一致)

要取值出来可以用增强for循环遍历取出。

常用方法:

     见Collection接口常用方法。

 

实现类:

     HashSet      使用HashMap实现,查询、增删效率都高,线程不安全,允许值为null。

     TreeSet  对内容自动进行排序,排序规则可以自行确定(继承Comparable接口,重写compareTo方法),使用TreeMap实现。

1.3 迭代器Interator

用来遍历容器中的值。

常用方法:

     hasNext()     判断是否有下一个元素。

     next()      返回游标所在元素,并把游标指向下一个位置。

     remove()    删除游标所在位置的元素,在next后该操作只能执行一次。

使用形式:

 Iterator  itr = Cllection的子类对象.iterator();
        while(itr.hasNext()){
            itr.next();
 }  

 

1.4 Collections工具类

它提供了一些操作Collection容器的简单方法:

      sort(List   list)                    排序,由小到大。

      shuffle(List   list)               打乱,随机排序。

      reverse(List   list)              逆序,头尾颠倒。

      fill(List  list  ,  Object   o)              用o重写整个list。

      int  binarySearch(List    list  , Object   o)    二分法在list中查找o,记得先给list排好序,不然会找不到!


 

2、Map接口

基于Key和Value的结构存储数据,Key不能重复,value可以重复。

常用方法:

        V   put(K  key , V  value)               添加一对key、value到集合中。

        void   putAll(Map    m)           把m中所有元素加入到集合中。

        V    remove(Object   key)         删除key对应的value。

        V    get(Object     key)            获取key对应的value。

        boolean   containKey(Object   key)     判断是否存在key。

        boolean   containValue(Object   value)    判断是否存在value。

        Set keySet()                获取所有的key,存放到Set集合中。

        Set<Map.Entry<K,V>>   entrySet()     返回一个Set,里面存放的是Map内的一个泛型接口Entry<K,V>,包含了集合的所有映射。

        void   clear()              删除Map中所有映射。

实现类:

      TreeMap 使用红黑树实现的,效率比HashMap低,但是它自动排序,排序规则(继承Comparable接口,重写compareTo方法)。

      HashMap   使用哈希表存储数据,如果新进来的值key重复,则会覆盖旧值。

遍历Map方式一:通过Key集合遍历。

Set<Integer>  set = map.keySet();
for(Integer i:set){
    //i为key
      System.out.println("key:"+i+"\nvalue:"+map.get(i));
}

遍历Map方式二:转为Set,再遍历。

        /**
         * entrySet返回一个Set集合,这个集合中存放的是Map.Entry<K,V>,
         * 看源码,易知Entry是Map的一个内部接口,它有三个方法:getKey()/getValue()/setValue()。
         */
       Set<Map.Entry<Integer,String>>  set=map.entrySet();
       for(Map.Entry<Integer,String> temp:set){
           //获得key和value
            temp.getKey()
            temp.getValue();
           //可以改变内部的值
           temp.setValue("love");
       }    

遍历Map方式三:转为Set,使用迭代器。

    //map把映射内容丢入一个Set<Map.Entry<K,V>>集合中,然后通过.iterator获得这个Set的迭代器
       Iterator<Map.Entry<Integer,String>>  it = map.entrySet().iterator();
       while(it.hasNext()){
           Map.Entry<Integer,String> temp =it.next();
           System.out.println(temp.getKey()+"->"+temp.getValue());
       }

解释一个难以理解的方法:

entrySet()方法

  它实现了HashMap对象转为Set对象,这样就可以使用迭代器Iterator进行遍历了。

  但是Set对象里面存放的比较特殊,是一对数据,Map.Entry<K,V>。

  这个数据有getKey,getValue,setValue三个方法。

 

posted @ 2022-12-04 19:53  在博客做笔记的路人甲  阅读(114)  评论(0编辑  收藏  举报