龙空技术网

四 JAVA集合之LIST

JAVA一点点 328

前言:

而今大家对“java中的list怎么用”大致比较注意,小伙伴们都想要分析一些“java中的list怎么用”的相关资讯。那么小编在网摘上搜集了一些有关“java中的list怎么用””的相关资讯,希望姐妹们能喜欢,兄弟们快快来学习一下吧!

List介绍

在Collection中,List集合是有序的,可对其中每个元素的插入位置进行精确地控制,可以通过索引来访问元素,遍历元素。

在List集合中,我们常用到ArrayList和LinkedList这两个类

2.1 ArrayList集合

ArrayList底层通过数组实现,随着元素的增加而动态扩容。

ArrayList是Java集合框架中使用最多的一个类,是一个数组队列,线程不安全集合。

它继承于AbstractList,实现了List, RandomAccess, Cloneable, Serializable接口。

ArrayList实现List,得到了List集合框架基础功能;

ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;

ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;

ArrayList实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

ArrayList集合的特点:

容量不固定,随着容量的增加而动态扩容(阈值基本不会达到)

有序集合(插入的顺序==输出的顺序)

插入的元素可以为null

增删改查效率更高(相对于LinkedList来说)

线程不安全

ArrayList的底层数据结构:

2.2 LinkedList集合

LinkedList底层通过链表来实现,随着元素的增加不断向链表的后端增加节点。

LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。

它继承AbstractSequentialList,实现了List, Deque, Cloneable, Serializable接口。

LinkedList实现List,得到了List集合框架基础功能;

LinkedList实现Deque,Deque 是一个双向队列,也就是既可以先入先出,又可以先入后出,说简单点就是既可以在头部添加元素,也可以在尾部添加元素;

LinkedList实现Cloneable,得到了clone()方法,可以实现克隆功能;

LinkedList实现Serializable,表示可以被序列化,通过序列化去传输,典型的应用就是hessian协议。

LinkedList集合的底层数据结构:

1.list中添加,获取,删除元素;

添加方法是:.add(e);  

获取方法是:.get(index);  

删除方法是:.remove(index);

按照索引删除; .remove(Object o);

List<String> person=new ArrayList<>();			person.add("jackie");	//索引为0	//.add(e)			person.add("peter");	//索引为1			person.add("annie");	//索引为2			person.add("martin");	//索引为3			person.add("marry");	//索引为4						person.remove(3);	//.remove(index)			person.remove("marry");		//.remove(Object o)						String per="";			per=person.get(1);			System.out.println(per); 	////.get(index)						for (int i = 0; i < person.size(); i++) {				System.out.println(person.get(i));	//.get(index)			}

2.list中是否包含某个元素;

  方法:.contains(Object o); 返回true或者false

List<String> fruits=new ArrayList<>();			fruits.add("苹果");			fruits.add("香蕉");			fruits.add("桃子");			//for循环遍历list			for (int i = 0; i < fruits.size(); i++) {				System.out.println(fruits.get(i));			}			String appleString="苹果";			//true or false			System.out.println("fruits中是否包含苹果:"+fruits.contains(appleString));						if (fruits.contains(appleString)) {				System.out.println("我喜欢吃苹果");			}else {				System.out.println("我不开心");			}

3.list中根据索引将元素数值改变(替换);

  注意 .set(index, element); 和 .add(index, element); 的不同;

String a="白龙马", b="沙和尚", c="八戒", d="唐僧", e="悟空";			List<String> people=new ArrayList<>();			people.add(a);			people.add(b);			people.add(c);			people.set(0, d);	//.set(index, element);		//将d唐僧放到list中索引为0的位置,替换a白龙马			people.add(1, e);	//.add(index, element);		//将e悟空放到list中索引为1的位置,原来位置的b沙和尚后移一位						//增强for循环遍历list			for(String str:people){				System.out.println(str);			}

4.list中查看(判断)元素的索引;  

  注意:.indexOf(); 和 lastIndexOf()的不同;

List<String> names=new ArrayList<>();			names.add("刘备");	//索引为0			names.add("关羽");	//索引为1			names.add("张飞");	//索引为2			names.add("刘备");	//索引为3			names.add("张飞");	//索引为4			System.out.println(names.indexOf("刘备"));			System.out.println(names.lastIndexOf("刘备"));			System.out.println(names.indexOf("张飞"));			System.out.println(names.lastIndexOf("张飞"));

5.根据元素索引位置进行的判断;

if (names.indexOf("刘备")==0) {	System.out.println("刘备在这里");}else if (names.lastIndexOf("刘备")==3) {	System.out.println("刘备在那里");}else {	System.out.println("刘备到底在哪里?");}

6.利用list中索引位置重新生成一个新的list(截取集合);

  方法: .subList(fromIndex, toIndex);  .size() ; 该方法得到list中的元素数的和

List<String> phone=new ArrayList<>();			phone.add("三星");	//索引为0			phone.add("苹果");	//索引为1			phone.add("锤子");	//索引为2			phone.add("华为");	//索引为3			phone.add("小米");	//索引为4			//原list进行遍历			for(String pho:phone){				System.out.println(pho);			}			//生成新list			phone=phone.subList(1, 4);	//.subList(fromIndex, toIndex)		//利用索引1-4的对象重新生成一个list,但是不包含索引为4的元素,4-1=3			for (int i = 0; i < phone.size(); i++) {	// phone.size() 该方法得到list中的元素数的和 				System.out.println("新的list包含的元素是"+phone.get(i));			}

7.对比两个list中的所有元素;

  //两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象

//1.if (person.equals(fruits)) {	System.out.println("两个list中的所有元素相同");}else {	System.out.println("两个list中的所有元素不一样");}//2.		if (person.hashCode()==fruits.hashCode()) {	System.out.println("我们相同");}else {	System.out.println("我们不一样");}

8.判断list是否为空;

  //空则返回true,非空则返回false

if (person.isEmpty()) {	System.out.println("空的");}else {	System.out.println("不是空的");}

9.返回Iterator集合对象;

System.out.println("返回Iterator集合对象:"+person.iterator());

1+0.将集合转换为字符串;

String liString="";liString=person.toString();System.out.println("将集合转换为字符串:"+liString);

11.将集合转换为数组;

System.out.println("将集合转换为数组:"+person.toArray());

12.集合类型转换;

//1.默认类型List<Object> listsStrings=new ArrayList<>();  for (int i = 0; i < person.size(); i++) {	listsStrings.add(person.get(i));}//2.指定类型List<StringBuffer> lst=new ArrayList<>();  for(String string:person){  lst.add(StringBuffer(string));}

13.去重复;

List<String> lst1=new ArrayList<>();			lst1.add("aa");			lst1.add("dd");			lst1.add("ss");			lst1.add("aa");			lst1.add("ss");                   //方法 1.			for (int i = 0; i <lst1.size()-1; i++) {				for (int j = lst1.size()-1; j >i; j--) {					if (lst1.get(j).equals(lst1.get(i))) {						lst1.remove(j);					}				}			}			System.out.println(lst1);			                   //方法 2.			List<String> lst2=new ArrayList<>();			for (String s:lst1) {				if (Collections.frequency(lst2, s)<1) {					lst2.add(s);				}			}			System.out.println(lst2);

标签: #java中的list怎么用 #list比较java #java后端接收list