List是接口,ArrayList是List的实现类(ArrayList不是继承List接口,是实现了List接口)List是接口,它是不可以被实例化的(接口是个抽象类),所以必须以它的实现类去实例化它。
ArrayList方法:
1.
创建一个集合list
List list = new ArrayList();
添加数据
语法:.add( )
//.add()添加数据
list.add("张三");
list.add(3);
list.add(2.8);
list.add('男');
list.add("体育");
list.add(12);
list.add(90);
删除数据
//list.remove(index)根据下标移除数据
list.remove(5);
//list.remove()删除括号里面的数据 返回结果为true或false
boolean a = list.remove(2.8);
System.out.println(a);
修改数据
语法:.set(index,数据)在指定位置替换数据
//list.set(index,数据)在指定位置替换数据
list.set(1,"李四");
查找数据
集合对象名.size()获取集合长度
//第一种方法
for(int i=0; i<list.size();i++) {
//list.get(i);获取i位次的值
System.out.print(list.get(i));
}
//第二种方法
/*
* 增强版的for循环
* 语法
* for(数据类型 名字:集合名字){}
* 作用:把集合中的每一个数据都赋值给前面的数据类型
*/
System.out.println(" ");
for(Object obj : list) {
System.out.print(obj+" ");
}
//第三种
/*
* 迭代器循环
*/
System.out.println(" ");
Iterator iterator = list.iterator();//前面的Interator是类
while(iterator.hasNext()){//iterator.hasNext()判断下一位还有没有值 有就接着循环
Object obj = iterator.next();
System.out.print(obj+" ");
}
插入另一个集合中的数据
语法:.addAll([index],集合名)
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
/*
* .addall(index,集合名)把数据传入另一个集合
*/
List qwe = new ArrayList();//声明一个集合
qwe.add(3);
qwe.add("你好");
qwe.addAll(1,list);//表示从下标为1的位置开始插入list集合中的数据
System.out.println(qwe);
}
}
删除集合中的所有元素
语法:.clear()
//对象名.clear()删除集合中的所有元素
qwe.clear();
ArrayList实例的浅拷贝(克隆)-----clone()
使用步骤:
1.在需要调用clone方法的对象上添加Cloneable接口
2.重写clone方法,在自己的clone方法中调用父类的clone方法,将返回值类型强转为本类类型,将当前的clone方法的修饰符改为public
3.在测试类中调用对象的clone方法
代码:
//父类
public class person implements Cloneable{
private String name;
private String age;
public String getAge() {//传出数据
return age;
}
public void setAge(String age) {//传入数据
this.age = age;
}
public String getName() {//传出数据
return name;
}
public void setName(String name) {//传入数据
this.name = name;
}
@Override
public person clone() throws CloneNotSupportedException {//protected要改为public才能让子类访问,返回值也要改为person(本类类型)
return (person) super.clone();//调用父类中clone方法
}
@Override
public String toString() {
return "person [name=" + name + ", age=" + age + "]";
}
}
//子类
package opp8;
public class testPerson {
public static void main(String[] args) throws CloneNotSupportedException {
person m = new person();
m.setName("张三");
m.setAge("男");
Object d = m.clone();//调用clone方法复制一个与m一样的对象d,但是他们的的hash码不同即存放地址不同
System.out.println(m+":"+m.hashCode());
System.out.println(d+":"+d.hashCode());
}
}
调用clone方法复制一个与m一样的对象d,但是他们的的hash码不同即存放地址不同
输出结果:
这里父类中的Cloneable是个空接口
空接口的好处:
一个实现了某个接口,并不仅仅事件单的继承成员,更重要的是他的数据类型发生了变化,他成为了接口的实现子类我们可以用instanceof关键字判断该引用指向对象是否是接口的实现对象
**语法格式:**对象名 instanceof 接口名
eg:`
class A{
}
intreface qwe{
}
A a = new A();
boolean d =a instanceof qwe;
判断集合中是否含有指定元素
语法:contains(Object o)若包含改元素返回true反之返回false
qwe.contains(4);
System.out.println(qwe.contains(4));
查找指定位置的元素
语法:.get( index)
int a = (int) list.get(4);
System.out.println(a);
返回此列表中指定元素的第一次出现的索引
若无则返回-1
语法:.indexOf(Object )
int b = list.indexOf(40);
System.out.println(b);
判断集合中是否有元素
有元素返回false,无元素返回true
语法:.isEmpty()
boolean i = qwe.isEmpty();
System.out.println(i);
以正确的顺序返回该列表中的元素的迭代器
语法:.iterator()
import java.util.ArrayList;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
System.out.println(list.iterator());
}
};
输出结果:java.util.ArrayList$Itr@15db9742
返回列表中指定元素的最后一次出现的索引
若无则返回-1
语法:.lastIndexOf(Object o)
import java.util.ArrayList;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
System.out.println(list.lastIndexOf(2.4));
}
};
返回列表中的列表迭代器(按适当的顺序)
语法:.listIterator()
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class testArrayList {
public static void main(String[] args) {
List qwe = new ArrayList();//声明一个集合
qwe.add(3);
qwe.add("你好");
qwe.addAll(1,list);
System.out.println(qwe.listIterator() );
}
}
输出结果:java.util.ArrayList$ListItr@6d06d69c
从此列表中删除指定集合中包含的所有元素
语法:removeAll(集合名)
//删除集合中的所有元素
qwe.removeAll(qwe);
System.out.println(qwe);
删除指定元素
语法:.removeif()
package opp8;
import java.util.ArrayList;
import java.util.List;
public class removeif extends person{
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
//删除元素a
list.removeIf(next -> next.equals("a"));
System.out.println(list.toString());
}
}
将该列表的每个元素替换为将该运算符应用于该元素的结果
语法:.replaceAll(UnaryOperator operator)
public class Test {
public static void main(String args[]) {
String Str = new String("www.google.com");
System.out.print("匹配成功返回值 :" );
System.out.println(Str.replaceAll("(.*)google(.*)", "runoob" ));
System.out.print("匹配失败返回值 :" );
System.out.println(Str.replaceAll("(.*)taobao(.*)", "runoob" ));
}
}
输出结果:
匹配成功返回值 :runoob
匹配失败返回值 :www.google.com
仅保留此列表中包含在指定集合中的元素
语法:.retainAll(集合);
package opp8;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
/*
* .addall(index,集合名)把数据传入另一个集合
*/
List qwe = new ArrayList();//声明一个集合
qwe.add(3);
qwe.add("你好");
qwe.addAll(1,list);//把list集合中的数据传入qwe中
qwe.retainAll(list);
System.out.println(qwe);
System.out.println(list.toString());
//
}
}
输出结果:
[4, 可以, 嗯, 2.4, 12, 许昌]
[4, 可以, 嗯, 2.4, 12, 许昌]
用指定的元素替换此列表中指定位置的元素
语法:.set( index, element)
package opp8;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
/*
* .addall(index,集合名)把数据传入另一个集合
*/
List qwe = new ArrayList();//声明一个集合
qwe.add(3);
qwe.add("你好");
qwe.addAll(1,list);//把list集合中的数据传入qwe中
qwe.set(2, "天气");
System.out.println(qwe.toString());
}
}
输出结果:
[3, 4, 天气, 嗯, 2.4, 12, 许昌, 你好]
返回此列表中的元素数
语法:.size()
package opp8;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add(4);
list.add("可以");
list.add('嗯');
list.add(2.4);
list.add(12);
list.add("许昌");
/*
* .addall(index,集合名)把数据传入另一个集合
*/
List qwe = new ArrayList();//声明一个集合
qwe.add(3);
qwe.add("你好");
qwe.addAll(1,list);//把list集合中的数据传入qwe中
int judge = qwe.size();
System.out.println(judge);
}
}
输出结果:
8
返回一个包含此集合中所有元素的数组
语法:.toArray();
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
public class testArrayList {
public static void main(String[] args) {
List list = new ArrayList();
/*
* 添加
*/
list.add("你好");
list.add(6);
list.add(8);
list.add(2.8);
list.add(12);
list.add('男');
//新建一个和list长度一样的数组
String [] arr =new String[list.size()];
//将List对象转换成数组
Object[] obj = list.toArray();
for(Object i:obj) {
System.out.print(i+" ");
}
}
}
输出结果:
你好 6 8 2.8 12 男