判断两个list集合⾥的对象某个属性值是否⼀样_第七章集合框
第⼀节集合和数组
1.1 为什么使⽤集合
数组缺点:长度固定,没有办法动态扩展
集合框架
集合框架简化图
1.2 Collection接⼝
第⼆节 List接⼝
特点:有序、允许重复
有序集合(也称为序列 )。
⽤户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
与set集合不同,列表通常允许重复的元素
2.2 ArrayList实现类
特点:动态数组;优势:随机查询(可以直接按索引访问)
特点:动态数组;优势:随机查询
可调整⼤⼩的数组,实现了List接⼝
每个ArrayList实例都有⼀个容量 。 容量是⽤于存储列表中的元素的数组的⼤⼩。 它总是⾄少与列表⼤⼩⼀样⼤。 当元素添加到ArrayList时,其容量会⾃动增长。
线程不同步(⾮线程安全)
线程不同步
st3;一气车
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
//创建List对象
List list = new ArrayList();
//添加数据
list.add(100);
list.add("aaa");
list.add(true);
list.add(true);
list.add(1.234);
Student s=new Student("张三",20);
list.add(s);
//list中可以添加重复的数据
list.add(100);
list.add("aaa");
//打印list中的数据
//System.out.println(list);
//删除数据
//按数据删除
//ve("aaa");
//按索引删除
//ve(3);
/
/对于整数类型的数据删除时要转为Integer类型,否则系统会认为是按索引删除        //Integer:是整形的包装类对象,也可以表⽰整数值,但是⽐int多了很多⽅法
//ve(Integer.valueOf(100));
//System.out.println(list);
//批量删除
//List rl =new ArrayList();
//rl.add(true);
//rl.add(1.234);
//rl.add("aaa");
//veAll(rl);
//System.out.println(list);
//遍历数据
//第⼀种:使⽤索引⽅式循环遍历
/*for(int i=0;i<list.size();i++){
Object o = (i);
if(o instanceof Student){北京上海大众
Student stu=(Student)o;
System.out.println("学⽣信息:"+Name());
}
System.out.println(o);
}*/
//第⼆种⽅式:for in迭代  ,不需要知道集合的长度
/*for(Object o : list){
/
/逐⼀取出list中的数据,存储到临时变量o中,然后使⽤变量
System.out.println(o);
}*/
//第三种⽅式:Iteraotr迭代器迭代集合
//通过集合返回迭代器对象,⽤于遍历当前集合
Iterator it = list.iterator();
//it.hasNext():判断集合是否有元素
while(it.hasNext()){
//next():获取集合中的⼀个元素
Object o = it.next();
System.out.println(o);
}
/*boolean b = it.hasNext();
if(b){
Object o = it.next();
System.out.println(o);
}
b = it.hasNext();
if(b){
if(b){
Object o = it.next();
System.out.println(o);
}*/
}
}
equals⽅法的使⽤:
public static void main(String[] args) {
String str1="你好";
String str2="你好";
String str3 = new String("你好");
//System.out.println(str1==str2);
//System.out.println(str1==str3);
//System.out.println(str1.equals(str3));
Student s1=new Student("张三",21);
Student s2=new Student("张三",20);
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
}
st3;
public class Student {
private String name;
private int age;
public Student(String name,int age){
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;
}
//重写equals⽅法,实现Student的内容⽐较
@Override
public boolean equals(Object obj) {
System.out.println("=========调⽤了equals==========");
//先判断⽐较的⽬标对象是否是学⽣,如果不是学⽣则直接返回false        if(!(obj instanceof Student)){
return false;
}
//说明⽬标对象是学⽣,通过向下转型(拆箱),获取学⽣对象
Student stu = (Student)obj;
//如果学⽣对象的名字和年龄都相等,则两个学⽣的内容相等
if(this.name.Name()) && this.age==Age()){
if(this.name.Name()) && this.age==Age()){            return true;
}
//如果有任何属性不相等,则返回false
return false;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
public static void main(String[] args) {
List list = new ArrayList();
奔驰汽车
list.add(100);
list.add("aaa");
list.add(1.234);
Student s1=new Student("张三",20);
list.add(s1);
System.out.println(list);
//ve(s1);
Student s2=new Student("张三",20);
//没有equals按地址⽐较,不能删掉,重写之后,按内容⽐较可以删掉        ve(s2);
System.out.println(list);
}
2.3 LinkedList 实现类
双链表实现了List和Deque接⼝
优势:数据的插⼊和删除 效率⾼
线程不同步
st4;
import java.util.LinkedList;
import java.util.List;途昂x试驾
public class Test1 {
public static void main(String[] args) {
s600l//链表集合
//List ll =new LinkedList();
LinkedList ll =new LinkedList();
ll.add("abc");
ll.add(100);
ll.add(1.234);
//在链表头部插⼊数据
ll.addFirst("张三");
//在链表尾部插⼊数据
ll.addLast("李四");
System.out.(2));
System.out.println(ll);
}
康迪电动汽车
}