集合与泛型

1、List接口

  List接口继承自—Collection—lterable。

  lterable接口循环迭代方式访问集合中的数据元素,定义了唯一一个返回指向集合的Iterator迭代器。它主要通过foreach方式处理集合中的元素,任何其实现类都可以通过获取指向集合的迭代实现对集合的遍历。

  List 接口间接继承自lterable接口并在Collection直接父接口基础上定义更多的可操作方法,最典型就是定义了以索引方式操作集合元素的方法。

  常用方法:

 

复制代码
  boolean add(Object e)
   
    void add(int index,Object element)

    void clear()

    boolean contains(Object o)

   Object get(int index)

    int size( )

    lterator<E> iterator()

    Object remove(int index)

    boolean remove(Object o)

    Object set(int index, Object element)

    public int indexOf(Object target)

    boolean isEmpty()

    void sort(Comparator comparator)
复制代码

  ArrayList、Vector

    ArrayList集合类是List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector类,除了此类是不同步的)。ArrayList查找访问集合元素速度比较快,删除,插入随机操作比较慢,经常在企业级开发中使用ArrayList处理数据应用。  

    Vector也被称为项量集合,和ArrayList非常类似都是可变的动态数组集合,最大区别是Vector是线程同步的,相对ArrayList数据处理效率要低;在多线程中通常使用Vector处理可能被多个线程并发访问的数据。

    Vector集合具有ArrayList的所有方法外,增加了public Enumeration<E> elements()方法,此方法返回Enumeration枚举接口,可使用此接口实现对集合的变量

   LinkedList

     常用方法;

      

复制代码
void addFrist(Object o)

void addLast()

Object getFrist()

Object getLast()

Object removeFrist()

Object removeLast()
复制代码

    ArrayList与LinkedList 的异同:

      (1)ArrayList 与 LinkedList 均设计为非线程安全,ArrayList 内部采用数组实现(与Vector相同),LinkedList 内部采用链表结构实现。

      (2)ArrayList 采用数组保存元素,意味着当大量添加元素,数组空间不足时,依然需要通过新建数组,内存复制的方式来增加内容,效率较低;而当对数组进行插入、删除操作时,又会进行循环移位操作,效率也较低;只有进行按下标查询时(get 方法),使用数组效率很高。

      (3)LinkedList 采用链表保存元素,在添加元素时只需要进行一次简单的内存分配即可,效率很高;进行插入、删除操作时,只需对链表中相邻的元素进行修改即可,效率也很高;但进行按下标查询时,需要对链表进行遍历,效率较低。

      (4)可以总结出 ArrayList 在进行数据的新增、插入、删除时效率较低,按下标对数据进行查找时效率较高;LinkedList 正好相反。一般来说 ArrayList 保存经常进行查询操作的集合,LinkedList适用于保存经常修改操作的集合。

+

2、Set接口

  Set接口继承自——Collectionlterable
  lterable接口循环迭代方式访问集合中的数据元素,定义了唯一一个返回指向集合的lterator迭代器。它主要通过foreach方式处理集合中的元素,任何其实现类都可以通过获取指向集合的迭代实现对集合的遍历。
  Set接口只能存储不相等的对象,Set接口是数学Set的抽象描述,与ArrayList不同,它其中元素不带有任何索引,不能使用索引方式访问集合中元素。
  Set接口通常追加,遍历元素比较慢,随机删除修改数据速度稍块。

  常用方法:

复制代码
    boolean add(Object e)

    void clear()

    boolean contains(Object o)

    lterator<E> iterator( )

    boolean remove(Object o)

    int size()

    boolean isEmpty0

    Object[] toArray()
复制代码

  HashSet

    此类实现Set接口,由哈希表(实际上是一个HashMap实例)支持实现算法。HashSet不能保证S集合元素的迭代顺序,也不能保证该顺序恒久不变。HashMap允许使用null 元素。
    HashSet实现不是线程同步的。如果在多个线程同时访问一个HashSet,应该做必要额外同步处理,HashSet由于不排序,通常只需效率比较高。

  TreeSet  

    TreeSet是基于TreeMap 的 NavigableSet实现并实现SortedSet排序接口。默认按照元素的自然顺序(升序)对元素进行排序,或者根据创建set时提供的Comparator进行排序。
    TreeSet不是线程同步的。如果在多个线程同时访问一TreeSet,必需做必要额同步处理。
    TreeSet由于需要进行排序,因此TreeSet比HashSet效率要低。

    常用方法

      public TreeSet(Comparator<E> comparator)  
      public lterator<E> descendinglterator()降序排序迭代器
      public E last()  //返回最后一个
      public E first()

  LinkedHashSet

      基于哈希表和链接列表的Set接口的实现类,与HashSet无序集合相比,LinkedHashSet的迭代是一个可以被预知的访问操作,它以添加到集合中的顺序为迭代最终顺序。
      由于LinkedHashSet需要维护元素顺序,因此效率比HashSet要稍低些。
      在需要保证使用Set接口并安照存储顺序迭代时使用它   //一般不用

 

3、Map接口

   Map接口是存储键值对象的顶级集合接口。存储在Map集合中的键值对象必需确保每个键是不重复的;对于相同的键对象在添加到Map中时会产生覆盖源键值对象操作。

  在通常情况下Map通过一个唯一的键查找其对应的值对象,键和值必需同时成对出现,一个键对应一个值对象。
  在很多情况下可以使用Map对象替代(如果需要)实体对象,这样可以在应用程序实体类比较多的情况下减少类的定义

    常用方法:   

复制代码
    Object put(Object key,Object value)

    Object get(Object key)

    boolean containsKey(Object key)

    boolean containsValue(Object value)

    int size( )

    Set<K> keySet()

    Collection<V> values( )boolean isEmpty)

    V remove(Object key)

    void clear()
复制代码

  HashMap

    HashMap是继承自AbstractMap间接实现Map接口的基于哈希表算法的 Map接口的实现类。此实现提供所有可选的映射操作,允许使用null值和null 键。HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。
    HashMap不是线程安全的,如果在多线程中使用必需在程序中处理同步问题

    实现类:

      public HashMap()  //构造一个默认初始容量16,默认加载因子 0.75

      public HashMap(int initsize)

      public HashMap(int initSize,float loadFactor)

  Hashtable 

    Hashtable类实现一个哈希表,该哈希表将键映射到相应的值。任何非null对象都可以用作键或值。
    Hashtable 与HashMap功能几乎是相同的,最大区别在于HashMap是非线程同步的,而Hashtable是线程同步的,在多线程中通常使用同步的Hashtable。
    由于Hashtable 要考虑线程同步问题,因此Hashtable执行效率要比HashMap低。在非多线程中提倡使用HashMp存储键值对象,从而提供性能。

  TreeMap

    基于红黑树(Red-Black tree)的NavigableMap实现。NavigableMap接口是SortedMap排序Map的子接口。
    TreeMap基于树形结构的排序方式实现排序,TreeMap默认以键为依据采用自然顺序进行排序,或者根据创建映射时提供的
    Comparator进行排序,具体取决于使用的构造方法由于排序,通常此类比HashMap效率要低。
    TreeMap 不是线程安全的,在多线程中必需手动处理同步问题。

 

4、Java泛型

  泛型在Java中被称之为”JAVA类型”,简称。泛型是Java SE平台1.5版本增加的新特性。泛型在Java中不是一种数据类型,是一种在编译时期的特殊语法,它能够让JVM识别从而确定在应用泛型的操作中体现泛型特点,帮助程序员在开发中从泛型中获得更高效和更安全数据的管理操作。

  泛型由于不是一种Java的数据类型所以在运行时,JVM将使用擦除法将泛型描述还原成未应用泛型语法的规则进行执行。
  泛型基本语法:<T>

  作用:

    • 泛型能够在代码书写过程中帮助程序员提高效率
    • 泛型能够在编译阶段确定数据类型是否符合要求,规避错误发生
    • 泛型能够避免数据对象强制类型转换操作
    • 泛型也能够支持在动态下确定数据类型

  例:List<T> list...

  带泛型的类:   

复制代码
    
public class GJClass<T>{
        public String getClassName(T t){
          return t.getClass().getName();//返回当前对象T的类型完全限定名
    }
}    
泛型类
复制代码

  带泛型的接口:

复制代码
    
public interface CountManager<T>{
    Double count(T countSupport, Double r);
    Double Count(T countSupport, Double bottom,Double height);
}

class CountmanagerChinaImp implements
        Countmanager<ComputerChina>{    }
class CountManagerUsalmp implements
        Countmanager<ComputerUsa>{    }
带泛型的接口
复制代码

  泛型通配符

    <?>无界通配符,占位符?通常会被处理为Object

      1.当前方法中结义Object超类中的方法来功能时

      2.使用泛型类不依赖于类型参数的方法时

    <? extend Type> 上限通配符,? 满足是Type或其派生类型

      1.集合类型存在继承关系

      2.限制类型的上限标准,无下限

    <? super Type>下限通配符,? 满足是 Type 的直接或间接超类型

      1.集合类型存在继承关系

      2.限制类型的下限标准,无上限

    注意:       

      1 泛型通配符几乎从不会用在泛型的方法操作,对象的创建,如果集合应用泛型通配符,通常也不会调用集合相关方法插入集合元素等依赖于类型的操作﹔

      2泛型通配符经常用在方法入参,方法返回值(尽量避免),成员属性字段及标识在类上,但在使用中应遵循1的习惯操作。

    不能使用基本数据类型实例化泛型类

    不能 new 类型参数实例  //编译错误 可以使用反射 .newInstance,但很不建议

    重载方法泛型 参数禁用区

    

    

        

 

 

 

  

  

posted @   xunzf  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示