`
zhouzhou423
  • 浏览: 900 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java的collection整理

阅读更多

1、java的集合结构:(java.util包中)

Collection

        |--List

               |--ArrayList

               |--LinkedList

               |--vector

                      |--stack

        |--Set

               |--EnumSet

               |--TreeSet

               |--HashSet(类似于HashMap)

 

Map

    |--HashMap

    |--Hashtable

 

 

2、具体区别:

(1)ArrayList和LinkedList的区别:

        LinkedList实现了List接口,类似于双向链表,允许null元素。提供了get,remove,insert等方法。

        LinkedList没有同步方法,如果多个线程同时访问LinkedList需要自己实现同步方法。

        一种实现同步方法:

         List list = Conllections.synchronizedList(new LinkedList<String>());

        ArrayList实现了List接口,类似于大小可变的数组。ArrayList也是非同步的。

        Vector类
        Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建
        的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线
        程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出
        ConcurrentModificationException,因此必须捕获该异常。
        Stack 类
        Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆
        栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方
        法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

 

(2)List和Set的区别:

        A、List允许多次插入null值,Set只允许插入一次null;

             set的add()方法是:public boolean add(E e),只有当set中不存在当前值时,才会插入成功;

             List的add()方法无此要求,可以允许重复插入;

 

        B、List可以使用list.get(int index)方法访问,Set是无序的,只能通过Iterator迭代访问;

             List是有序的Collection,可以精确的控制每个元素,可以使用每个元素的索引(元素在List中的下标,类似于数组的下标): 

List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(1));
list.add(new Integer(2));
System.out.println(list.get(2));//下标从0开始,輸出為2

            

             List也实现了Iterator接口,也可以通过Iterator迭代:

List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(1));
list.add(new Integer(2));		
Iterator<Integer> ite = list.iterator();
while(ite.hasNext()){
      ite.next();
}

        List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一  些add()之类的方法,允许添加, 删除,设定元素,还能向前或向后遍历。

ListIterator<Integer> ite2 = list.listIterator();//listIterator()方法,返回一个ListIterator接口
//ite2.previousIndex();//前一个索引值
//ite2.nextIndex();//后一个索引值
//ite2.previous();//前一个元素
//ite2.next();
//ite2.add(new Integer(3));//将指定的元素插入列表,插入到当前元素的后面
//ite2.next();//后一个元素
//ite2.set(new Integer(4));//用指定元素替换 next 或 previous 返回的最后一个元素		
Iterator<Integer> ite = list.iterator();
while(ite.hasNext()){
System.out.println(ite.next());//3,1,1,2
}

  

(3)List和Map的区别:

        Map没有实现Collection接口,是以Key-Value形式存在的。

 

 (4)Hashtable 和HashMap的区别:

      都是以key-value的形式储存数据的。

      Hashtable 不允许null作为key或value,是线程安全的;

      HashMap 允许null作为key或者value,是非线程安全的;

     

Map<Object, Object> table = new Hashtable<Object, Object>();
table.put(null, null);

    会报java.lang.NullPointerException异常,换成HashMap则正常;

          

 

3、Collections和Collection的区别:

Collections.reverse(list); //list中元素顺序反转

Collections.sort(list);//按大小排序

Collections.synchronizedList(list);//该list加同步的方法

 

 

4、总结:

1)如果涉及到堆栈、队列等操作,应该使用List。对于快速插入、删除元素,应该使用LinkedList;而如果希望快速的随机访问元素,使用ArrayList。

2)建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

 

分享到:
评论

相关推荐

    java Collection类整理

    Java集合框架中的`Collection`接口是所有单值容器的基础接口,它定义了基本的增删查改元素的方法。`Collection`有两个主要的子接口:`List`和`Set`。`List`接口要求元素保持特定的顺序,并允许重复元素;而`Set`接口...

    java笔记整理(超详细) java笔记整理(超详细)

    - `Collection`接口是所有集合类的根接口,分为`List`和`Set`两大分支。 - `List`接口包括`ArrayList`和`LinkedList`等实现,`ArrayList`适合随机访问,`LinkedList`适合频繁的插入和删除操作。 - `Map`接口用于...

    Java集合collection详解[整理].pdf

    Java集合collection详解[整理].pdf

    JAVA笔记(根据马士兵的java视频整理).pdf

    "JAVA笔记(根据马士兵的java视频整理)" 本资源是根据马士兵的JAVA视频整理的笔记,涵盖了JAVA的基础知识、数据结构、面向对象编程、Java Web编程、J2EE、J2ME等方面的知识点。 在基础知识方面,本资源涵盖了变量...

    java集合资料整理

    ### Java集合资料整理 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一套丰富的API来存储和操作集合中的对象。集合框架的核心是接口和它们的实现类,这些接口和实现类共同构成了一个高度...

    Java核心面试知识整理.pdf

    本文档是一份关于Java核心面试知识的整理资料,内容涉及Java虚拟机(JVM)、Java内存模型、垃圾回收机制、Java IO/NIO、Java集合等多个关键知识点。通过对这些知识的梳理,能够帮助Java开发者更好地准备面试,同时也...

    Java Garbage Collection Basics

    # Java垃圾回收基础知识详解 ## 引言 Java 虚拟机 (JVM) 的垃圾回收机制是 Java 语言的一项重要特性,它自动管理内存,帮助开发者减轻了手动管理内存的压力。本篇将深入探讨 Java 垃圾回收的基本原理、工作方式...

    Java面试题以及答案整理.pdf

    14. **在COLLECTION框架中,实现比较要实现的接口** 要实现`Comparable&lt;T&gt;`接口,以便在集合中进行自然排序。 15. **插入法排序代码** 插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未...

    JAVA核心知识点整理.zip

    java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...

    The-Java-Garbage-Collection-Mini-book.zip

    垃圾回收(Garbage Collection,简称GC)是Java语言的一个重要特性,它自动化地管理程序中的内存分配与释放,避免了传统C++等语言中的内存泄漏问题。本文将围绕Java垃圾回收这一主题,展开一系列关键知识点的详细解析...

    Java面试问题整理.docx

    ### Java面试知识点详解 #### 一、Java简介与特点 **Java**是由Sun Microsystems公司在1995年推出的一种高级程序设计语言。它具有跨平台的特性,可以在多个操作系统上运行,例如Windows、Mac OS以及其他多种UNIX...

    18年秋招JAVA面经精心整理总结

    Java面试经验整理涉及了Java集合框架的核心知识点,特别是List、Set和Map三个接口及其子接口和实现类的特性、用途和性能比较。以下是对这部分内容的知识点总结: 1. Java集合框架结构 Java集合框架由Collection...

    JAVA核心知识整理.pdf

    - **接口继承关系和实现**:Java集合框架提供了一组标准接口,如Collection、Set、List、Map等,这些接口定义了集合的行为,而具体的实现类则提供了具体的操作实现。 - **List**: - **ArrayList(数组实现)**:...

    JAVA核心面试知识整理

    Java集合框架中的接口包括Collection、Set、List、Map等。 3.2 LIST List接口表示一个有序集合,ArrayList和Vector是List接口的典型实现,ArrayList基于数组实现,Vector既基于数组又线程同步。 3.3 SET Set接口...

    JAVA EE api 整理

    Java EE API 整理主要涉及的是Java集成框架中的核心组件——集合框架。集合框架是Java编程语言中的一个重要组成部分,它提供了存储和管理对象的方式。在Java 2之前,也就是Java 1时代,集合框架并不完善,仅有一些...

    资深工程师整理面试题:Java

    Java 面试题整理 下面是对给定文件的详细知识点总结: 1. J2EE 是什么? 答:J2EE 是 Sun 公司提出的多层、分布式、基于组件的企业级应用模型。在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又...

    JAVA核心知识点整理_分享.pdf

    这份"JAVA核心知识点整理_分享.pdf"文档涵盖了Java技术体系的关键点,包括JVM(Java虚拟机)的深入理解,这对于任何Java开发者来说都是至关重要的。以下是根据文档内容整理的一些核心知识点: ### JVM(Java ...

    JAVA容器对象整理

    这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java容器知识点。 1. **ArrayList与LinkedList** - `ArrayList`是一个基于数组实现的...

    JAVA核心知识点整理.pdf

    老年代的垃圾回收通常采用标记-压缩(Mark-Compact)或分代收集(Generational Collection)算法。 总结: Java的核心在于其跨平台的JVM,理解JVM的工作原理和内存管理有助于优化程序性能,降低内存泄漏和提高应用...

Global site tag (gtag.js) - Google Analytics