java中的List

属于Java.util类包。

Collection是最基本的集合接口。由Collection接口派生的两个接口是ListSet。

一、List

list是有序的Collection,使用此接口能够精确地控制每个元素插入的位置,用户可使用索引来访问List中的元素,类似于数组。List允许有相同的元素,而set不允许。允许有null元素。List除了具有Collection接口必备的Iterator方法外,还提供一个ListIterator方法,返回一个listliterator接口,和标准的Iterator接口相比,ListIterator多了一些add之类的方法,允许添加、删除、设定元素。还能向前或向后遍历。向中间插入或移除元素。

实现List接口的常用类有ArrayList、LinkedList、Vector和Stack。其中,Stack类继承自Vector类。

ArrayList:(1)由数组实现。(2)优点在于随机访问元素,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来右后向前遍历ArrayList,而不是用来插入或删除元素(因为那比LinkedList开销要大很多)。(3)实现了可变大小的数组。默认情况下自动增长原来的50%,初始默认容量为10。(4)是异步的,ArrayList中的对象不是线程安全的。

LinkedList:(1)用双向链表实现。(2)对顺序访问进行了优化,向LinkedList中插入或删除元素的开销并不是很大。随机访问则相对较慢。(3)还具有下列方法:addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法使得LinkedList可以当做堆栈、队列和双向队列使用。(4)LinkedList是异步的,没有同步方法。如果多个线程同时访问List,则必须自己实现访问同步。一种方法是在创建List时构造一个同步的list,实现方法为:List list=Collection.synchronizedList(new LinkedList(...));。

Vector:(1)由数组实现(2)实现了可变大小的数组。默认情况下自动增长原来的一倍,初始默认容量为10。(3)是同步的,Vector中的对象是线程安全的,但同步的要求会影响执行效率。(和ArrayList非常类似,但是是同步的)

Stack:继承自Vector类,实现了后进先出的堆栈。实现了额外的5个方法:push入栈、pop出栈、peek得到栈顶元素、empty检查堆栈是否为空、search检测元素在堆栈中的位置。

二、Set

Set:(1)是一种不包含重复元素的Collection。(2)最多有一个null元素。(3)与Collection具有完全一样的接口。(4)不保证维护元素的次序。

Set子类:HashSet、TreeSet、LinkedHashSet。

HashSet:为快速查找设计的Set。存入HashSet的对象必须定义HashCode().无序,可放一个null。

TreeSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列(自动排好序)。不许放入null值。

LinkedHashSet:具有HashSet的查询速度,内部用链表维护元素的顺序(插入的次序)。使用迭代器遍历Set时,结果会按元素插入的次序显示。

时间: 2024-10-13 00:02:03

java中的List的相关文章

java中的三元运算符详解

最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

java中BigDecimal的学习

干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了. BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算. 当你接触到和钱有关的计算的时候,这个类还是很有用滴. 先来看一个例子 1 package com.tuhooo.bigdecimal; 2 3 /** 4 * Created by tuhooo

Java 中几个重要的关键字

Java中的关键字特别多,大致如下: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volatile 程序控制 break continue return do while if else for instanceof switch case default 异常

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

JAVA中只有值传递

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:"引用传递!",并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟

Java中如何优雅正确的终止线程

Java中终止线程的方式主要有三种: 1.使用stop()方法,已被弃用.原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的"残疾"数据,不符合完整性,所以被废弃.So, forget it! 2.使用volatile标志位 看一个简单的例子: 首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行 public class MyRunnable i

Java中I/O流之数据流

Java 中的数据流: 对于某问题:将一个 long 类型的数据写到文件中,有办法吗?    转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. 现在,Java 中的数据流能够很好的解决这个问题(不需要转换,直接写进去) 1. DataInputStream 与 DataOutputStream 分别继承自 InputStream.OutputStream, 它属于处理流,需要分别套接在 InputStream.OutputStream 类

java中Random随机种子使用

在java中,通过Random生成随机数时,如果设置随机种子,则相同的种子,产生的随机数相同.若不设置则每次随机的不同. Random rnd = new Random(); rnd.setSeed(10);//用于设置种子. rnd.nextInt();// 用于产生随机数. rnd.nextInt(10); // 产生(0-9)数字.

java中的反射机制和javaBean

反射 反射:就是通过一个类加载进方法区时加载到栈内存中的Class字节码文件对这个类进行解剖 通过反射可以获取到一个类的构造方法,成员方法,成员变量 反射将一个类的各个部分映射成相应的类 反射获取构造方法 Class类中方法 Constructor<?>[] getConstructors() 返回当前字节码文件对象的所有public修饰的构造方法 Constructor<T> getConstructor(Class<?>...parameterTypes)返回指定了

JAVA中的继承

1.什么是继承 基于一个已存在的类,创建一个新的类.已存在的类即父类,新的类即子类,继承就是子类继承并拥有父类的属性和方法,同时,子类还有拥有父类所不具有的属性和方法. 父类,也称为基类.超类(superclass):子类,也称为派生类. 2.JAVA中"继承"的特点 JAVA中一个类只能继承一个父类.不像C++等语言那样,可以继承多个类.这也是JAVA比较容易学的一方面 只能继承父类中非private成员属性和方法,private是父类所特有的不能继承 3.JAVA中的"继