------- android培训、java培训、期待与您交流! ---------
ArrayList中
package day14;
import java.util.ArrayList;
import java.util.Iterator;
/*
将自定义对象作为元素存到ArrayList集合中,并去除从父元素。
比如:存人对象。同姓名同年龄,视为同一个人,为重复元素。
思路:
1,对人的描述,将数据封装进人对象。
2,定义容器,将人存入。
3,取出
结论 List 集合判断元素是否相同 ,依据的是元素equals方法
*/
//人的描述 类
class Person{
private String name;
private int age ;
//构造器
Person(String name, int age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj){
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
System.out.println(this.name+";;;;;;"+p.name);
return this.name.equals(p.name)&&this.age==p.age;
}
//获取
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
public class ArrayListTest2 {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
//定义一个 集合容器
ArrayList al = new ArrayList();
//外部 描述类 给容器添加 元素的格式〉〉〉〉〉〉〉〉找 构造器
al.add(new Person("lisi01", 30));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi03", 33));
al.add(new Person("lisi04", 32));
al.add(new Person("lisi04", 32));
al.add(new Person("lisi05", 35));
al = singleElment( al);
//遍历取出
Iterator it = al.iterator();
while(it.hasNext()){
//因为a1.add(Object obj);
//Object obj = new Person("lisi01",30); 返回值提升了 为Object
Person p=(Person)it.next();//〉〉〉〉〉〉所以要强转
sop(p.getName()+",,,,,"+p.getAge());
}
}
//唯一元素的 方法
public static ArrayList singleElment(ArrayList a1){
//定义一个临时容器
ArrayList newA1 = new ArrayList();
//遍历老集合
Iterator it =a1.iterator();
while (it.hasNext()){
Object obj = it.next();//为什么要obj一下呢???? 拿下一个元素用obj记下来
//判断一下 如果不包含下面的一个元素 就往容器集合里面添加元素
if(!newA1.contains(obj))//——————————————————————List---中用contains内部调用equals
newA1.add(obj);
}
return newA1;
}
}
HashSet
package day14;
import java.util.HashSet;
import java.util.Iterator;
/*王hashset集合中存入自定义对象
姓名和年龄视为同一个人,重复元素*/
/*HashSet 和Arraylisht 中 equals的区别 〉〉〉〉〉〉〉〉〉〉〉〉〉???????
首先Set存储时无序不可重复的,List是有序可重复的
List---中用contains内部调用equals
Set----中使用的equals方法是其存入的类(Person或其他)的重写的equals,hashCode方法*/
public class HashSetTest {
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
hs.add(new Person("a4",14));
hs.add(new Person("a1",11));
hs.add(new Person("a2",13));
Iterator it =hs.iterator();
while(it.hasNext()){
Person p=(Person)it.next();//〉〉〉〉〉〉所以要强转>>>>看ArrayListTest2
sop(p.getName()+",,,,,"+p.getAge());
}
}
}
class Person{
private String name;
private int age ;
//构造器
Person(String name, int age){
this.name = name;
this.age = age;
}
public int hashCode(){
//验证
System.out.println(this.name+".....hashCode");
//return 60;
//为提高效率 返回name.hashCode()+age;
//return name.hashCode()+age; 20+30=30+20 总hash值有可能相同 为了尽量保持返回的哈希值 唯一性 随便乘以一个数
return name.hashCode()+age*39;
}
//hashset 判断
public boolean equals(Object obj){
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
System.out.println(this.name+";;;equals;;;"+p.name);
return this.name.equals(p.name)&&this.age==p.age;
}
//获取
public String getName(){
return name;
}
public int getAge(){
return age;
}
}