java中切实集合

LinkedList 一种可以在任何位置进行高效地插入和删除操作的有序序列,TreeSet 一种有序集,5.HashMap  键值对关联的数据结构,6.TreeMap  键值有序排列的映射表,使用next()获得序列中的下一个元素,它可以遍历并选择序列中的对象,一种没有重复元素的无序集合(C++的标准库中并未提供hashset集合,Java集合类库中最重要的两个接口Collection&lt

TreeMap 1种key有序的投射

捌.EnumSet   包罗枚举类型值的值

 

   
注:从集合框架的全体规划技术、扩充性、效用等方面综合相比较,Java在此方面和C++的stl相比照旧存在一定的出入。尤其是扩张性和频率方面,C++
的标准库定义了更加多更加灵敏的模参扩张。由于标准库都以透过沙盘的法子完毕的,由此其执行功能要掌握优化基于虚函数的虚指针和虚表的那种动态绑定的多态格局,其不足只是编写翻译速度有点慢罢了。
    14.    算法:
   
在C++中提供了一套泛型算法,首要包蕴排序、搜索和比较等通用操作,由于这么些泛型算法完全依照各样集合提供的迭代器(iterator)统一接口,因而能够直达一种中度的泛型操作,以及算法函数和聚众之间的完全松耦合。见如下C++代码:

LinkHashSet 1种能够记住成分插入次序的成团

陆.TreeMap  键值有序排列的映射表

  Iterator是Java迭代器最简单易行的落到实处,为List设计的ListIterator具有越来越多的效劳,它能够从三个方向遍历List,也足以从List中插入和删除成分。

    1三.   
集合视图:顾名思义,全部的见面视图和数据库中的普通视图1样,并不存款和储蓄真实是的容器成分,而只是树立1套针对原有底层集合数据的引用机制,针对全体视图
的操作或底部集合的操作都会同时互相影响,如插入和删除等,然则对于视图而言,插入操作倘诺效果于其范围之外将会掀起那三个。对于分裂类其他视图其操作也存
在分裂的界定。
    一).    subList:获取底层集合中某1限量的要素,如List group2 =
staff.asList(10,20);
那第五个索引上的数码是被含有的,第3个目录的数额是不被含有的。假使推行了group2.clear()操作情况了视图中的数据,那么staff中那段
范围内的数据也会被连同删除。对于有序聚集和映射表(Map),可以运用排序依次而不是因素地方建立子范围,如SortedSet接口注脚的
SortedSet<E> subSet(E from,E to); SortedSet<E> headSet(E
to); SortedSet<E> tailSet(E from);
注意那一个参数的档次均不是因素的目录,而是对象自作者。SortedMap中也有近似的点子,如SortedMap<K,V>
subMap(K from,K to); SortedMap<K,V> headMap(K to);
SortedMap<K> tailMap(K
from)。在NavigableSet中提供越来越丰富的接口,如NavigableSet<E>
subSet(E from,boolean fromInclusive,E to,boolean toInclusive);
NavigableSet<E> headSet(E to,boolean toInclusive);
NavigableSet<E> tailSet(E from,boolean fromInclusive);
    二).    不可修改的视图:       
    Collections.unModifiableCollection();
    Collections.unModifiableList();        //用于ArrayList、LinkedList
    Collections.unModifiableSet();       
//用于HashSet、TreeSet、LinkedHashSet
    Collections.unModifiableSortedSet();//用于TreeSet
    Collections.unModifiableMap();       
//用于HashMap、TreeMap、LinkedHashMap
    Collections.unModifiableSortedMap();//用于TreeMap
    如List<String> staff = new LinkedList<String>();
List<String> unmodifiableList = new
Collections.unmodifiableList(staff);
这里unmodifiableList作为2个List对象,全部访问器的方法均可像普通List壹样操作,不过对于更改器方法的调用将会引发
UnsupportedOperationException卓殊。假若实在需求修改数据只可以通过原始集合来完毕。
    三)    同步视图:
    Collections.synchronizedList();        //用于ArrayList、LinkedList
    Collections.synchronizedSet();       
//用于HashSet、TreeSet、LinkedHashSet
    Collections.synchronizedSortedMap();//用于TreeMap
    Collections.synchronizedSortedSet();//用于TreeSet
    Collections.synchronizedMap();       
//用于HashMap、TreeMap、LinkedHashMap
   
之后全数通过联合视图访问底层集合的操作都将是线程安全的,即synchronized关键字就不必要在集合的表面添加了,不过对于底层集合的直白访问照旧是线程不安全。
    肆)   
被检查视图:见之下两种情景,第二种情景将会在汇集执行(String)rawList.get()操作时抛出ClassCastException卓殊,第3种意况则会在rawList.add()操作时就立即抛出ClassCastException。

LinkedList 壹种能够在别的岗位展开快速地插入和删除操作的雷打不动类别

十.PriorityQueue  允许高效去除最小成分的聚众

  Java中的Iterator功用相比不难,并且只好单向活动:

 1     public class Item implements Comparable<Item> {
 2         public int compareTo(Item other) {
 3             return partNumber - other.partNumber;
 4         }
 5     }
 6     public static void main(String[] args) {
 7         SortedSet<Item> parts = new TreeSet<Item>();
 8         parts.add(new Item("Toaster",1234));
 9         parts.add(new Item("Widget",4562));
10         parts.add(new Item("Modem",9912));
11         System.out.println(parts);
12         
13         SortedSet<Item> sortByDescription = new TreeSet<Item>(new Comparator<Item>() {
14             public int compare(Item a,Item b) {
15                 String descA = a.getDescription();
16                 String descB = b.getDescription();
17                 return descA.compareTo(descB);
18             }
19         });
20         sortByDescription.addAll(parts);
21         System.out.println(sortByDescription);
22     }

TreeSet 一种有序集

一.ArrayList   能够动态拉长和收缩的目录系列

 list l = new ArrayList();
 l.add("aa");
 l.add("bb");
 l.add("cc");
 for (Iterator iter = l.iterator(); iter.hasNext();) {
  String str = (String)iter.next();
  System.out.println(str);
 }
 /*迭代器用于while循环
 Iterator iter = l.iterator();
 while(iter.hasNext()){
  String str = (String) iter.next();
  System.out.println(str);
 }
 */

    柒.   
TreeSet:该集合为平稳聚集,数据在插入集合后便根据自定义的排序规则将插入的指标开始展览排序,该集合首若是由此三种方法排序插入对象的,一种是须要集合成分类必须是Comparable<T>的兑现类,那样在插入对象的时候,集合能够依据compareTo方法的重临值来鲜明新插入对象
的职位,别的1种方法是通过在构造该集合对象的时候,传入Comparator<T>的贯彻类作为参数,之后全数插入的对象都是由此Comparator<T>的compare方法的再次来到值来决定新对象的职位。该集合是经过RBTree(红黑树)来促成排序的,那一点和
C++标准库中的set和map是平等的。由于目的插入集合之后是板上钉钉的,由此该集合的插入效用要自愧不及HashSet的插入效能。TreeSet和
HashSet相比较根本的差别来自于对象的排序规则,以上HashSet的演示代码均适用于TreeSet,上边只是列出指标相比较的代码:

HashMap 1种存储key:value关联的照射

7.  EunmMap  枚举类型的映射表

  (二)
使用next()获得系列中的下2个成分。

 1     #include <algorithm>
 2     #include <set>
 3     #include <vector>
 4     using namespace std;
 5     int main()
 6     {
 7         vector<int> v1;
 8         for (int i = 0; i < 10; ++i)
 9             v1.push_back(i);
10         set<int> s1;
11         for (int i = 0; i < 20; ++i)
12             s1.insert(i);
13         sort(v1.begin(),v1.end());
14         binary_search(v1.begin(),v1.end(),5);
15         binary_search(s1.begin(),s1.end(),5);
16         return 0;
17     }

ArrayList 一种能够动态增加和削减的目录种类

二.LinkedList 得以在其它职分神速插入和删除错左的不变连串

迭代器应用:

 1     public static void showSubMapAndHeadMapAndTailMap() {
 2         TreeMap<String, String> sortedMap = new TreeMap<String, String>();
 3         sortedMap.put("Adobe", "Mountain View, CA");
 4         sortedMap.put("IBM", "White Plains, NY");
 5         sortedMap.put("Learning Tree", "Los Angeles, CA");
 6         sortedMap.put("Microsoft", "Redmond, WA");
 7         sortedMap.put("Netscape", "Mountain View, CA");
 8         sortedMap.put("O'Reilly", "Sebastopol, CA");
 9         sortedMap.put("Sun", "Mountain View, CA");
10         System.out.println(sortedMap);
11         //firstKey and lastKey 是SortedMap中提供的方法,HashMap中没有。
12         String low = sortedMap.firstKey(), high = sortedMap.lastKey();
13         System.out.println(low);
14         System.out.println(high);
15         Iterator<String> it = sortedMap.keySet().iterator();
16         int i = 0;
17         while (it.hasNext()) {
18             if (i == 3)
19                 low = it.next();
20             if (i == 6)
21                 high = it.next();
22             else
23                 it.next();
24             i++;
25         }
26         System.out.println(low);
27         System.out.println(high);
28         //以下3个方法也是SortedMap中提供的方法,HashMap中没有。
29         System.out.println(sortedMap.subMap(low, high));
30         System.out.println(sortedMap.headMap(high));
31         System.out.println(sortedMap.tailMap(low));
32     }

ArrayDeque  一种用循环数组实现的双端队列

11.LinkedHashMap  能够记住键值添加次序的映射表

  (四)
使用remove()将迭代器新回到的因素删除。

    11.   
LinkedHashSet和LinkedHashMap:那五个聚众与HashSet和HashMap唯壹的分歧是LinkedHashSet和LinkedHashMap通过中间贯彻的双向链表保留了集合成分的插入顺序,见如下代码: