List是Java中比较常用的集合类,关于List接口有很多实现类
ArrayList实现了List接口,是List的实现
ArrayList
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。
集合的创建:ArrayList<Integer> arrayList = new ArrayList<Integer>();
LinkedList
LinkedList底层是通过双向链表实现的。所以,LinkedList和ArrayList之前的区别主要就是数组和链表的区别。
数组中查询和赋值比较快,因为可以直接通过数组下标访问指定位置。
链表中删除和增加比较快,因为可以直接通过修改链表的指针(Java中并无指针,这里可以简单理解为指针。其实是通过Node节点中的变量指定)进行元素的增删。
LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢
集合的创建:LinkedList<Integer> linkedList = new LinkedList<Integer>();
此处之上为转载:https://blog.csdn.net/qq_38218238/article/details/82904926
List的用法
List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化ArrayList或LinkedList;
list.add()
添加对象:
List<String>list=new LinkedList<String>();
list.add("tom");
System.out.println(list.get(0));
结果:
tom
注意:add(int index, Object obj),向指定索引位置添加对象
public static void main(String[] args) {
List<String>list=new ArrayList<String>();
list.add(0,"a");
list.add(1,"e");
list.add(2,"d");
结果:
a
e
d
list.get() 获取方法
List<String>list=new ArrayList<String>();
list.add("tom");
String c=list.get(0);
System.out.println(c);
结果:
tom
list.remove(index);删除方法;按照索引删除
List<String>list=new ArrayList<String>();
list.add("tom");
list.remove(0);
System.out.println(list.gei(0));
结果:
报错!因为长度为0
remove(Object o); 按照元素内容删除;
list中是否包含某个元素;
方法:.contains(Object o); 返回true或者false
List<String>list=new ArrayList<String>();
list.add("香蕉");
list.add("苹果");
list.add("菠萝");
//for循环遍历
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
//true OR false
System.out.println("list中是否包含苹果:"+list.contains("苹果"));
结果:
香蕉
苹果
菠萝
list中是否包含苹果:true
list中根据索引将元素数值改变(替换);
list.set(index, element);:替换原来位置上的字符
List<String>list=new ArrayList<String>();
System.out.println(list.size());
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.set(0,"Alice");
list.set(1,"Alice");
System.out.println(list.size());
for(int i=0;i<list.size();i++)
System.out.println(list.get(i));
结果:
0
5
Alice
Alice
c
d
e
list.add(index, element);将添加的放到索引位置,原来的数据往下移
List<String>list=new ArrayList<String>();
System.out.println(list.size());
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add(0,"Alice");
list.add(1,"Alice");
System.out.println(list.size());
for(int i=0;i<list.size();i++)
System.out.println(list.get(i));
结果:
0
7
Alice
Alice
a
b
c
d
e
list中查看(判断)元素的索引;
list.indexOf()和 list.lastIndexOf()的不同
List<String>list=new ArrayList<>();
list.add("a"); //索引为0
list.add("b"); //索引为1
list.add("c"); //索引为2
list.add("a"); //索引为3
list.add("c"); //索引为4
System.out.println(list.indexOf("a"));
System.out.println(list.lastIndexOf("a"));
System.out.println(list.indexOf("c"));
System.out.println(list.lastIndexOf("c"));
结果:
0
3
2
4
利用list中索引位置重新生成一个新的list(截取集合)
方法: .subList(fromIndex, toIndex); .size() ; 该方法得到list中的元素数的和
List<String> list=new ArrayList<>();
list.add("a"); //索引为0
list.add("b"); //索引为1
list.add("c"); //索引为2
list.add("d"); //索引为3
list.add("e"); //索引为4
//原list进行遍历
for(String pho:list){
System.out.println(pho);
}
//生成新list
list=list.subList(1, 4); //.subList(fromIndex, toIndex) //利用索引1-4的对象重新生成一个list,但是不包含索引为4的元素,4-1=3
for (int i = 0; i < list.size(); i++) { //list.size() 该方法得到list中的元素数的和
System.out.println("新的list包含的元素是"+list.get(i));
}
对比两个list中的所有元素
if (person.equals(fruits)) {
System.out.println("两个list中的所有元素相同");
}
判断list是否为空
方法:list.isEmpty() 空则返回true,非空则返回false
if (list.isEmpty()) {
System.out.println("空的");
}else {
System.out.println("不是空的");
}
结果:
不是空的
将集合转换为字符串;
String liString="";
liString=person.toString();
System.out.println("将集合转换为字符串:"+liString);
将集合转换为数组;
System.out.println("将集合转换为数组:"+person.toArray());
迭代器(Iterator)
迭代器(Iterator)
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
迭代器的应用
list l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
for (Iterator iter = l.iterator(); iter.hasNext();) {
String str = (String)iter.next();
System.out.println(str);
}
/*迭代器用于while循环
Iterator iter = l.iterator();
while(iter.hasNext()){
String str = (String) iter.next();
System.out.println(str);
}
*/
Person类
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Iterator it=list.iterator();
while(it.hasNext()) {
Person p0=it.next();
System.out.println(“Person”+p0.getName()+" ,"+p0.getAge());
}
System.out.println(list.contains(new Person(“tom999”,99)));
}