zoukankan      html  css  js  c++  java
  • JAVA中的集合框架

    public interface Iterable<T> 
    public interface Iterator<E> 
    一个典型的iterator模式的应用。 
    注意注释中提到的Iterator和enumerations一个不同点是方法名的提高,命名还是很重要的。 

    public interface Collection<E> 
    extends Iterable<E> 

    比较有意思。 
    线程策略由实现类决定。 
    注意contains并不是一定要使用equals,而是把自由给了实现类。 
    很多可选操作。 
    如果要继承equals方法需要特别小心,默认的约定是List和Set永远不相等。 

    JAVA代码:

    1. // Query Operations  
    2. int size();  
    3. boolean isEmpty();  
    4. boolean contains(Object o);  
    5. Iterator<E> iterator();  
    6. Object[] toArray();  
    7. <T> T[] toArray(T[] a);  
    8.   
    9. // Modification Operations  
    10. boolean add(E e);  
    11. boolean remove(Object o);  
    12.   
    13. // Bulk Operations  
    14. boolean containsAll(Collection<?> c);  
    15. boolean addAll(Collection<? extends E> c);  
    16. boolean removeAll(Collection<?> c);  
    17. boolean retainAll(Collection<?> c);  
    18. void clear();  
    19.   
    20. // Comparison and hashing  
    21. boolean equals(Object o);  
    22. int hashCode();

    2 Set 

    1. public boolean removeAll(Collection<?> c) {  
    2.     boolean modified = false;  
    3.   
    4.     if (size() > c.size()) {  
    5.         for (Iterator<?> i = c.iterator(); i.hasNext(); )  
    6.             modified |= remove(i.next());  
    7.     } else {  
    8.         for (Iterator<?> i = iterator(); i.hasNext(); ) {  
    9.             if (c.contains(i.next())) {  
    10.                 i.remove();  
    11.                 modified = true;  
    12.             }  
    13.         }  
    14.     }  
    15.     return modified;  
    16. }  

    3 List 

    1. // Positional Access Operations  
    2. E get(int index);  
    3. E set(int index, E element);  
    4. void add(int index, E element);  
    5. E remove(int index);  
    6.   
    7. // Search Operations  
    8. int indexOf(Object o);  
    9. int lastIndexOf(Object o);  
    10.   
    11. // List Iterators  
    12. ListIterator<E> listIterator();  
    13. ListIterator<E> listIterator(int index);  
    14.   
    15. // View  
    16. List<E> subList(int fromIndex, int toIndex);  

    4 Map

    1.    public V get(Object key) {  
    2. Iterator<Entry<K,V>> i = entrySet().iterator();  
    3. if (key==null) {  
    4.     while (i.hasNext()) {  
    5.     Entry<K,V> e = i.next();  
    6.     if (e.getKey()==null)  
    7.         return e.getValue();  
    8.     }  
    9. else {  
    10.     while (i.hasNext()) {  
    11.     Entry<K,V> e = i.next();  
    12.     if (key.equals(e.getKey()))  
    13.         return e.getValue();  
    14.     }  
    15. }  
    16. return null;  
    17.    }  

    Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

    集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

    java集合框架

    1. 什么是框架:类库的集合

    2.集合框架:用来表示和操作的统一的架构,包含了实现集合的接口与类

    3.集合:存放数据的容器

    集合框架包含了两部分:一部分是接口,一部分是类

    4.为什么会出现接口:因为集合框架中的很多类 功能是相似的【所以用接口来规范类】

    List接口实现类很多:

    AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector 一般情况下主要用到的是ArrayList,和LinkedList,其他的类并不是说没用 

    ArrayList

    ArrayList允许所有元素包括null。ArrayList没有同步

    理解一:ArrayList 使用一个内置的数组来存储元素,这个数组的起始容量是10.当数组需要增长时,新的容量按如下公式获得:新容量=(旧容量*3)/2+1,也就是说每一次容量大概会增长50%。这就意味着,如果你有一个包含大量元素的ArrayList对象,那么最终将有很大的空间会被浪费掉,这个浪费是由 ArrayList的工作方式本身造成的。如果没有足够的空间来存放新的元素,数组将不得不被重新进行分配以便能够增加新的元素。

    对数组进行重新分配,将会导致性能急剧下降。如果我们知道一个ArrayList将会有多少个元素,我们可以通过构造方法来指定容量。我们还可以通过trimToSize方法在 ArrayList分配完毕之后去掉浪费掉的空间。

    理解二:ArrayList是用数组实现的,它不是真正的链表,在初始化的时候它先对数组设置一个初始容量,当数组空间不够的时候,它会重新构建一个容量更大的数组,然后把先前的元素拷贝进去

    不管是一还是二暂且不管他存放元素的方式。唯一一点可以确认他使用内置的数组

    LinkedList 

    List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,

    LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列 (deque)。此类实现 Queue 接口,为 add、poll 等提供先进先出队列操作。其他堆栈和双端队列操作可以根据标准列表操作方便地进行再次强制转换。虽然它们可能比等效列表操作运行稍快,但是将其包括在这里主要是出于方便考虑.

  • 相关阅读:
    Could not determine which “make” command to run. Check the “make” step in the build configuration
    crontab定时任务不执行的原因
    Linux 设置定时任务crontab命令
    Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题
    Java并发编程:volatile关键字解析
    什么是ClassLoader
    GeoJson格式与转换(shapefile)Geotools
    Docker图形化工具——Portainer
    Docker安装mysql、nginx、redis、tomcat
    Docker中nginx+tomcat实现负载均衡
  • 原文地址:https://www.cnblogs.com/zhongmingyuan/p/4908373.html
Copyright © 2011-2022 走看看