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

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类整理

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

    Java集合可以分为Collection和Map两种体系: Collection接口: ​ List:元素有序,可重复的集合 ​ ArrayList: 底层数组实现,有利于随机访问get ​ LinkedList:底层是链表,有利于频繁的插入、删除操作(ArrayList删除和...

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

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

    JAVA核心知识点整理.zip

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

    java笔记整理(超详细)

    Java集合可以分为Collection和Map两种体系: Collection接口: ​ List:元素有序,可重复的集合 ​ ArrayList: 底层数组实现,有利于随机访问get ​ LinkedList:底层是链表,有利于频繁的插入、删除操作(ArrayList删除和...

    java中级面试题(自己汇总)

    * List和Set都是继承自Collection接口,List是有序可重复的,Set是无序不可重复的。 * Set放入元素的位置是根据其hashCode决定的,把一个Object放入一个Set前,必须都equals()方法进行定义。 * List可以用for循环...

    java集合(自学整理)

    自己学习总结的java常用集合知识

    Java常见面试题208道.docx

    19.Collection 和 Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和 Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.说一下 HashMap 的实现原理? 24.说一下 ...

    JAVA面试资料大全-整理.zip

    整理的java面试有关资源:如 1、 多线程有几种实现方法?同步有几种实现方法? 2、 JDBC 中的 PreparedStatement 相比 Statement 的好处? 3、 Java 中实现多态的机制是什么? 4、 说出 ArrayList,Vector, LinkedList ...

    java程序设计填空题题库49道

    《java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 40. __________包包含了Collection的接口的类的API。 答案:Java.util 41. Math.round...

    java面试过程当中遇到的一些题目

    Java面试题整理 9 Java面向对象 9 1. super()与this()的区别? 9 2. 作用域public,protected,private,以及不写时的区别? 9 3. 编程输出如下图形。 9 4. JAVA的事件委托机制和垃圾回收机制 10 5. 在JAVA中,如何跳出...

    javalruleetcode-advanced_Java_collection:Advanced_Java_collection

    我对这部分知识做了一个系统的整理,方便学习查阅。 本项目已开通 Discussions 功能。学习之前,先来看看 的技术面试官是怎么说的吧。本项目欢迎各位开发者朋友到 分享自己的一些想法和实践经验。也不妨 Star 关注 ...

    JAVA面试题最全集

    要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法...

    java集合类的全解

    最新整理的集合全集 对map 和 collection 下的类进行了详细的整理。

    java面试题(面试 宝典)

    Java面试题整理 9 Java面向对象 9 1. super()与this()的区别? 9 2. 作用域public,protected,private,以及不写时的区别? 9 3. 编程输出如下图形。 9 4. JAVA的事件委托机制和垃圾回收机制 10 5. 在JAVA中,如何跳出...

    Java Map简介_动力节点Java学院整理

    Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。本文是动力节点java学院给大家整理的java map知识,需要的的朋友参考下吧

    JAVA-algorithm-subject-collection.rar_site:www.pudn.com

    参加比赛前培训的JAVA算法题目集合,学校内部老师整理而来,在校学习之必备良方!

    Java concurrency之集合_动力节点Java学院整理

    Java集合主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合),有需要的小伙伴可以参考下

    Java学习笔记-个人整理的

    {4}Collection}{80}{chapter.4} {4.1}\ttfamily java.util.ArrayList}{80}{section.4.1} {4.2}\ttfamily java.util.LinkedList}{81}{section.4.2} {4.3}贪吃蛇案例}{82}{section.4.3} {4.4}散列表与HashMap}{83...

Global site tag (gtag.js) - Google Analytics