您的位置:首页 > 其它

当ArrayList集合中有字符串类型,又有对象时,如何简便的去除重复元素

2018-03-30 16:03 711 查看
ArrayList是List接口的一个实现类,ArrayList是基于数组实现的,查询元素很快。但是,如果进行元素的增删的话,涉及大量的元素的复制移动操作,特别影响性能。它是程序中最常见的一种集合。在ArrayList内部封装了一个初始化长度为10,但长度可变的数组对象,默认的加载因子为0.6,当存入的元素长度到达了该数组容量的60%,那么会产生一个新的数组,长度为原数组的1.5倍。然后将原来数组中的元素复制到新的数组中。但是也并不是无限扩容,最大为2147483639。ArrayList集合中大部分方法都是从父类Collection和List继承过来的。要实现对题目中问题的解答,所以举了一个完整的例子。
首先在创建一个Person类,在类中有姓名、年龄这两个属性,并对其进行封装,写出构造方法。代码如下:public class Perosn {
private String name;
private int 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;
}
public Perosn() {
super();
}
public Perosn(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Perosn [name=" + name + ", age=" + age + "]";
}
}然后在main方法中给出ArrayList集合,并存入字符串元素、Person对象元素。

boolean add(Object obj)向集合中添加一个元素;
boolean addAll(Collection c)将指定Collection中的所有元素添加到该集合中;

void add(int index,Object  obj) 将元素obj插入在List集合的index处;
boolean addAll(int index,Collection c)将集合c所包含的所有元素插入到List集合的index处。
代码如下:
ArrayList list1=new ArrayList();
list1.add("阿花");
list1.add("是个");
list1.add("仙女");
list1.add("是个");
list1.add(new Perosn("小可爱",18));
list1.add(new Perosn("小可爱",18));
通过调用add()方法向ArrayList集合中添加了6个元素。循环遍历该集合,每取出一个放置在新的集合中,放置之前先判断新的集合是否已经包含了新的元素。所以要先创建一个新的集合,然后通过迭代器进行遍历,根据不同的数据类型进行判断。代码如下: int i=0;
Iterator it=list1.iterator();
while(it.hasNext()) {
Object obj=it.next();
i++;
//如果是string类型的话
if(obj instanceof String){
if(!list2.contains(obj)) {
list2.add(obj);
}
}else{//如果不是string类型的话,那么就是Person类型
System.out.println("list的下标为"+i+"的是对象类型");
if(!list2.contains(obj.toString())){
//obj进行toString()方法,来看list2里面有没有obj的属性,没有就增加进去
list2.add(obj.toString()); }
}
}contains()方法是用来判断该集合中是否包含某个元素。此时加了!,就说明当obj不存在在list2集合中时,向list2集合添加obj。若只是单单判断对象元素,通过修改equals()方法就可以判断两个对象属性内容相同时即视为同一对象。通过修改equals()方法来判断的话,实现方法为:public boolean equals(Object obj){
if(obj instanceof Person){
Person stu=(Person)obj;
return stu.getName().equals(this.getName())&&stu.getSex().equals(this.getSex())&&stu.getAge()==this.getAge();
}
return false;
}这个时候只要两个对象属性一样,就视为同一对象。
用简便方法运行的结果如图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ArrayList
相关文章推荐