志在指尖
用双手敲打未来

java list(java list用法详解)

javalist

List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList、LinkedList和Vector之间的联系和差异。
List是一个接口,它承继于Collection的接口。它代表着有序的队列。当我们评论List的时候,一般都和Set作比较。
List中元素能够重复,并且是有序的(这里的有序指的是依照放入的次序进行存储。如依照次序把1,2,3存入List,那么,从List中遍历出来的次序也是1,2,3)。
Set中的元素不能够重复,并且是无序的(从set中遍历出来的数据和放入次序没有联系)。
下面是Java中的调集类的联系图。从中能够大致了解调集类之间的联系
ArrayList、LinkedList和Vector之间的差异
从上图能够看出,ArrayList、LinkedList和Vector都完成了List接口,是List的三种完成,所以在用法上非常类似。他们之间的主要差异体现在不同操作的性能上。后面会详细分析。
ArrayList
ArrayList底层是用数组完成的,能够以为ArrayList是一个可改动巨细的数组。跟着越来越多的元素被添加到ArrayList中,其规模是动态添加的。
LinkedList
LinkedList底层是经过双向链表完成的。所以,LinkedList和ArrayList之前的差异主要便是数组和链表的差异。
数组中查询和赋值比较快,由于能够直接经过数组下标访问指定方位。
链表中删去和添加比较快,由于能够直接经过修正链表的指针(Java中并无指针,这里能够简略理解为指针。其实是经过Node节点中的变量指定)进行元素的增删。
所以,LinkedList和ArrayList比较,增删的速度较快。可是查询和修正值的速度较慢。一起,LinkedList还完成了Queue接口,所以他还提供了offer(),peek(),poll()等办法。
Vector
Vector和ArrayList相同,都是经过数组完成的,可是Vector是线程安全的。和ArrayList比较,其间的许多办法都经过同步(synchronized)处理来保证线程安全。
假如你的程序不涉及到线程安全问题,那么运用ArrayList是更好的选择(由于Vector运用synchronized,必然会影响效率)。
二者之间还有一个差异,便是扩容战略不相同。在List被第一次创建的时候,会有一个初始巨细,跟着不断向List中添加元素,当List以为容量不行的时候就会进行扩容。Vector缺省情况下自动增长本来一倍的数组长度,ArrayList增长本来的50%。java

javalist用法详解

最近在letcode刷题的时分,发现在运用java编写程序的时分总会遇到List,LinkedList,Queue。于是学习了一下,记载一下List到底是个什么东西。
Java调集
作为一个Developer,Java调集类是咱们在工作中运用最多的、最频繁的类。比较于数组(Array)来说,调集类的长度可变,愈加适合于现代开发需求;
Java调集就像一个容器,能够存储任何类型的数据,也能够结合泛型来存储详细的类型目标。在程序运行时,Java调集能够动态的进行扩展,跟着元素的增加而扩展。在Java中,调集类一般存在于java.util包中。
Java调集主要由2大系统构成,分别是Collection系统和Map系统,其间Collection和Map分别是2大系统中的顶层接口。
Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(行列)。其间,List、Queue中的元素有序可重复,而Set中的元素无序不行重复;
List中主要有ArrayList、LinkedList两个完成类;Set中则是有HashSet完成类;而Queue是在JDK1.5后才出现的新调集,主要以数组和链表两种方式存在。
Map同归于java.util包中,是调集的一部分,但与Collection是彼此独立的,没有任何关系。Map中都是以key-value的方式存在,其间key有必要唯一,主要有HashMap、HashTable、TreeMap三个完成类。
1LIST
在Collection中,List调集是有序的,Developer可对其间每个元素的刺进方位进行精确地控制,能够经过索引来访问元素,遍历元素。
在List调集中,咱们常用到ArrayList和LinkedList这两个类。
ArrayList
其间,ArrayList底层经过数组完成,跟着元素的增加而动态扩容。而LinkedList底层经过链表来完成,跟着元素的增加不断向链表的后端增加节点。
ArrayList是Java调集结构中运用最多的一个类,是一个数组行列,线程不安全调集。
它承继于AbstractList,完成了List,RandomAccess,Cloneable,Serializable接口。
(1)ArrayList完成List,得到了List调集结构基础功用;
(2)ArrayList完成RandomAccess,获得了快速随机访问存储元素的功用,RandomAccess是一个标记接口,没有任何办法;
(3)ArrayList完成Cloneable,得到了clone()办法,能够完成克隆功用;
(4)ArrayList完成Serializable,表明能够被序列化,经过序列化去传输,典型的使用便是hessian协议。
它具有如下特点:
容量不固定,跟着容量的增加而动态扩容
有序调集(刺进的顺序==输出的顺序)
刺进的元素能够为NULL
增修正查功率更高
线程不安全
LinkedList
LinkedList是一个双向链表,每一个节点都具有指向前后节点的引用。比较于ArrayList来说,LinkedList的随机访问功率更低。
它承继AbstractSequentialList,完成了List,Deque,Cloneable,Serializable接口。
(1)LinkedList完成List,得到了List调集结构基础功用;
(2)LinkedList完成Deque,Deque是一个双向行列,也便是既能够先入先出,又能够先入后出,说简单些便是既能够在头部增加元素,也能够在尾部增加元素;
(3)LinkedList完成Cloneable,得到了clone()办法,能够完成克隆功用;
(4)LinkedList完成Serializable,表明能够被序列化,经过序列化去传输,典型的使用便是hessian协议。
1.1List常用办法
A:增加功用
booleanadd(Ee):向调集中增加一个元素
voidadd(intindex,Eelement):在指定方位增加元素
booleanaddAll(CollectionextendsE>c):向调集中增加一个调集的元素。
B:删去功用
voidclear():删去调集中的一切元素
Eremove(intindex):根据指定索引删去元素,并把删去的元素回来
booleanremove(Objecto):从调集中删去指定的元素
booleanremoveAll(Collection>c):从调集中删去一个指定的调集元素。
C:修正功用
Eset(intindex,Eelement):把指定索引方位的元素修正为指定的值,回来修正前的值。
D:获取功用
Eget(intindex):获取指定方位的元素
Iteratoriterator():便是用来获取调集中每一个元素。
E:判别功用
booleanisEmpty():判别调集是否为空。
booleancontains(Objecto):判别调集中是否存在指定的元素。
booleancontainsAll(Collection>c):判别调集中是否存在指定的一个调集中的元素。
F:长度功用
intsize():获取调集中的元素个数
G:把调集转换成数组
Object[]toArray():把调集变成数组。
1.2ArrayList基本操作
publicclassArrayListTest{
publicstaticvoidmain(String[]agrs){
//创立ArrayList调集:
Listlist=newArrayList();
System.out.println(“ArrayList调集初始化容量:”+list.size());
//增加功用:
list.add(“Hello”);
list.add(“world”);
list.add(2,”!”);
System.out.println(“ArrayList当时容量:”+list.size());
//修正功用:
list.set(0,”my”);
list.set(1,”name”);
System.out.println(“ArrayList当时内容:”+list.toString());
//获取功用:
Stringelement=list.get(0);
System.out.println(element);
//迭代器遍历调集:(ArrayList实践的跌倒器是Itr目标)
Iteratoriterator=list.iterator();
while(iterator.hasNext()){
Stringnext=iterator.next();
System.out.println(next);
}
//for循环迭代调集:
for(Stringstr:list){
System.out.println(str);
}
//判别功用:
booleanisEmpty=list.isEmpty();
booleanisContain=list.contains(“my”);
//长度功用:
intsize=list.size();
//把调集转换成数组:
String[]strArray=list.toArray(newString[]{});
//删去功用:
list.remove(0);
list.remove(“world”);
list.clear();
System.out.println(“ArrayList当时容量:”+list.size());
}
}
1.3LinkedList基本操作
publicclassLinkedListTest{
publicstaticvoidmain(String[]agrs){
ListlinkedList=newLinkedList();
System.out.println(“LinkedList初始容量:”+linkedList.size());
//增加功用:
linkedList.add(“my”);
linkedList.add(“name”);
linkedList.add(“is”);
linkedList.add(“jiaboyan”);
System.out.println(“LinkedList当时容量:”+linkedList.size());
//修正功用:
linkedList.set(0,”hello”);
linkedList.set(1,”world”);
System.out.println(“LinkedList当时内容:”+linkedList.toString());
//获取功用:
Stringelement=linkedList.get(0);
System.out.println(element);
//遍历调集:(LinkedList实践的跌倒器是ListItr目标)
Iteratoriterator=linkedList.iterator();
while(iterator.hasNext()){
Stringnext=iterator.next();
System.out.println(next);
}
//for循环迭代调集:
for(Stringstr:linkedList){
System.out.println(str);
}
//判别功用:
booleanisEmpty=linkedList.isEmpty();
booleanisContains=linkedList.contains(“jiaboyan”);
//长度功用:
intsize=linkedList.size();
//删去功用:
linkedList.remove(0);
linkedList.remove(“jiaboyan”);
linkedList.clear();
System.out.println(“LinkedList当时容量:”+linkedList.size());
}
}
//删去功用:
linkedList.remove(0);
linkedList.remove(“jiaboyan”);
linkedList.clear();
System.out.println(“LinkedList当时容量:”+linkedList.size());
}
}
总结
只要自己把代码走一遍,测试一下数据,基本上就能把握List的运用办法了,祝各位在学习路上一路疏通!

未经允许不得转载:IT技术网站 » java list(java list用法详解)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载