集合类ArrayList
现讨论一下以下的问题
如果需要删除 重复的元素那该如何处理?
list.add(new Student("张三",23));
list.add(new Student("张三",23));
list.add(new Student("李四",24));
list.add(new Student("张三",23));
list.add(new Student("李四",24));
那么就有思路如下:
1,找个新的容器ArrayList
2,查找容器中是否已经包含该元素,没有就添加 ,有就不添加进 该容器了.
public static void getOnlyElement(ArrayList list) {
ArrayList newList = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!newList.contains(obj)){
newList.add(obj);
}
}
System.out.println(newList);
然而如果添加的元素是自定义的引用时以上操作的是不会有任何反应的.原因是引用类型处理的是地址值,无法按照我们理想中的按照某条件进行的.那么要重写该对象的类的equals()方法.
例如以下的Student 类的处理一样 .
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
Student s = (Student) obj;
/* 这样处理就不是按照默认的地址值,而是按照该类的属性来判断 */
return this.getName().equals(s.getName()) && this.getAge() == s.getAge();
}
}
LinkedList 类
- LinkedList类特有功能
- public void addFirst(E e)及addLast(E e)
- public E getFirst()及getLast()
- public E removeFirst()及public E removeLast()
- public E get(int index);
/* 创建一个类将Linked中的方法封装 模拟栈结构 */
public class Stack {
//创建LinkedList对象
private LinkedList list = new LinkedList();
//封装addLast()方法
public void in(Object obj) {
list.addLast(obj);
}
//封装removeLast()方法
public Object out() {
return list.removeLast();
}
//封装isEmpty()方法
public boolean isEmpty() {
return list.isEmpty();
}
}