今日学习内容总结如下:
List接口
有序 允许重复
public interface List<E> extends Collection<E>
继承自Collection接口的方法
- boolean add(E e);向集合末尾追加元素e对象
- boolean remove(Object obj)删除第一个和obj相等的元素,如果没有和obj相等元素,则报异常indexoutofboundsexception
List接口中的特殊方法
- void add(int index, E element); 向指定索引位置index上添加元素element,原始数据自动后移
- E get(int index); 获取指定索引号对应的元素,index应该在[0,size-1]
- E set(int index, E element); 用于给指定索引位置上进行赋值,这个位置上必须有对应的数据(已经赋过值),这里实际上是修改操作,否则indexoutofboundsexception
- E remove(int index);删除指定位置的元素,可以返回原始位置上存储的元素
- int indexOf(Object o); 查找从左向右第一个o元素的下标索引,如果元素不存在返回-1
- int lastIndexOf(Object o);从右向左查找
对象相等判定使用的是equals方法
sort方法按照自定义比较器对集合中的所有元素进行排序,默认自然序
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray(); //将List集合对象转换为数组
Arrays.sort(a, (Comparator) c); //调用Arrays工具类中的排序方法对数组进行排序
ListIterator<E> i = this.listIterator(); //获取List集合对象中特殊的Iterator迭代器对象
for (Object e : a) { //foreach结构遍历数组中的所有元素
i.next();
i.set((E) e); //修改集合List中迭代器指定的当前位置上的元素
}
}
list.sort(new Comparator<A2>() {
public int compare(A2 o1, A2 o2) {
// 自定义比较规则,按照id从小到大,如果id相等则按照name从大到小
int res = o1.getId().compareto(o2.getId());
if (res == 0)
res = (o1.getName().compareto(o2.getName())) * -1;
return res;
}
});
对应的实现类
- ArrayList底层实现为数组,线程不安全
- Vector底层实现为数组,线程安全 synchronized
- LinkedList底层实现为链表,线程不安全
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
public class Test1 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new A1());
list.add(new A1());
System.out.println("add:"+list.size());
list.remove(new A1());
System.out.println("remove:"+list.size());
for(int i=0;i<5;i++)
list.add(i); //自动装箱操作
Iterator it=list.iterator();
while(it.hasNext()) {
Object tmp=it.next();
System.out.println(tmp);
}
}
}
class A1 {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@Override
public boolean equals(Object obj) {
// 用户自定义的比较规则
if (this == obj)
return true;
if (obj == null) // 当前对象不可能为null,否则空指针异常
return false;
if (getClass() != obj.getClass()) // 类型判断。一个类只能加载一次
return false;
A1 other = (A1) obj;
// 调用Objects工具类中的方法进行相等判断
/*
* public static boolean equals(Object a, Object b) { return (a == b) || (a !=
* null && a.equals(b)); }
*/
return Objects.equals(id, other.id) && Objects.equals(name, other.name);
}
}
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/*
* List接口中的sort方法
*/
public class Test2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new A2(99L, "zhangsan"));
list.add(new A2(77L, "lisi"));
list.add(new A2(99L, "wangwu"));
list.sort(new Comparator<A2>() {
public int compare(A2 o1, A2 o2) {
// 自定义比较规则,按照id从小到大,如果id相等则按照name从大到小
int res = o1.getId().compareto(o2.getId());
if (res == 0)
res = (o1.getName().compareto(o2.getName())) * -1;
return res;
}
});
list.forEach(System.out::println);
}
}
class A2 {
private Long id;
private String name;
public A2(Long id, String name) {
this.id = id;
this.name = name;
}
// ===================================
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "A2 [id=" + id + ", name=" + name + "]";
}
}
import java.util.List;
import java.util.ArrayList;
public class Test3 {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5; i++)
list.add(i);
for (int i = 0; i < 5; i++)
list.add(0,i);
list.forEach(System.out::print);
}
}
import java.util.List;
import java.util.ArrayList;
public class Test4 {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5; i++)
list.add(i);
for (int i = 0; i < 5; i++)
list.add(0,i);
for(int i=0;i<list.size();i++)
System.out.println(list.get(i));
}
}
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
public class Test5 {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5; i++)
list.add(i);
list.set(0, new Random()); //success
list.set(5, new Date()); // indexoutofboundsexception
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
}
}
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
public class Test6 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(100);
for (int i = 0; i < 5; i++)
list.add(i);
list.remove(4);//最佳匹配原则
list.remove(Integer.valueOf(100)); //参数是Object
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class Test7 {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 5; i++) {
list.add(new A7(1L + i, "name_" + i));
}
System.out.println(Arrays.toString(list.toArray()));
int pos = list.indexOf(new A7(5L, "name_4"));
System.out.println(pos);
}
}
class A7 {
private Long id;
private String name;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
A7 other = (A7) obj;
return Objects.equals(id, other.id);
}
public A7(Long id, String name) {
super();
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "A7 [id=" + id + ", name=" + name + "]";
}
}
原文地址:https://www.jb51.cc/wenti/3281936.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。