1. LinkedList练习题
使用LinkedList模拟一个堆栈或者队列数据结构。
堆栈:先进后出,如同一个杯子。
队列:先进先出,First in first out ,如同一个水管。
package collectionDemo;
import java.util.LinkedList;
//使用LinkedList模拟队列
class Queue{
private LinkedList link;
public Queue(){
link = new LinkedList();
}
public void myAdd(Object obj){
link.add(obj);
}
public Object myGet(){
return link.remove();
}
public Boolean isNull(){
return link.isEmpty();
}
}
//使用LinkedList模拟栈
class Stack{
private LinkedList link;
public Stack(){
link = new LinkedList();
}
public void myAdd(Object obj){
link.add(obj);
}
public Object myGet(){
return link.removeLast();
}
public Boolean isNull(){
return link.isEmpty();
}
}
public class LinkedListTest {
public static void main(String[] args) {
//队列
Queue q1 = new Queue();
q1.myAdd('a');
q1.myAdd('b');
q1.myAdd('c');
sop("先进先出:"+q1.myGet());
//栈
Stack s1 = new Stack();
s1.myAdd('a');
s1.myAdd('b');
s1.myAdd('c');
sop("先进后出:"+s1.myGet());
}
public static void sop(Object obj){
System.out.println(obj);
}
}
输出:
先进先出:a
先进后出:c
2. ArrayList练习题
去除ArrayList集合中的重复元素。
package collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add(1);
list.add(1);
list.add(2);
list.add(2);
sop("初始化集合为:"+list);
sop("去重之后的集合为:"+singElement(list));
}
public static ArrayList singElement(ArrayList list){
//创建一个临时存放的ArrayList
ArrayList temp = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()){ //在迭代时循环中next调用一次,就要hasNext判断一次
Object obj = it.next();
if(!temp.contains(obj)) temp.add(obj);
}
return temp;
}
public static void sop(Object obj){
System.out.println(obj);
}
}
输出结果:
初始化集合为:[1, 1, 1, 2, 2]
去重之后的集合为:[1, 2]
3. ArrayList练习2
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象,同姓名同年龄,视为同一个人,为重复元素。
思路:
- 对人描述,将数据封装进入对象
- 定义容器,将人存入。
- 取出。
结论: List集合判断某一元素是否和集合中的元素相同,使用contains
方法,更具体的说是依据元素的equals
方法。
package collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Object obj){
if(obj instanceof Person){
Person p = (Person)obj;
System.out.println("调用equals............."+this.name+"....."+p.getName());
return this.name.equals(p.getName()) && this.age==p.getAge();
}
return false;
}
}
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Person("shh01",12));
list.add(new Person("shh02",12));
list.add(new Person("shh02",15));
list.add(new Person("shh03",12));
list.add(new Person("shh03",12));
Iterator it = list.iterator();
while (it.hasNext()){
Object obj = (Person) it.next();
if(obj instanceof Person){ // 向下转型
Person p = (Person)obj;
System.out.println("初始化:"+p.getName()+"....."+p.getAge());
}
}
singElement(list);
}
public static ArrayList singElement(ArrayList list){
//创建一个临时存放的ArrayList
ArrayList temp = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()){
Object obj = it.next();
if(obj instanceof Person) {
Person p = (Person) obj;
System.out.println(p.getName()+"....."+p.getAge());
if(!temp.contains(p)){
temp.add(p);
System.out.println("无重复元素,添加:"+"["+p.getName()+","+p.getAge()+"]");
}
else{
System.out.println("["+p.getName()+","+p.getAge()+"]是重复元素,不添加!");
}
}
}
return temp;
}
}
输出结果:
初始化:shh01.....12
初始化:shh02.....12
初始化:shh02.....15
初始化:shh03.....12
初始化:shh03.....12
shh01.....12
无重复元素,添加:[shh01,12]
shh02.....12
调用equals.............shh02.....shh01
无重复元素,添加:[shh02,12]
shh02.....15
调用equals.............shh02.....shh01
调用equals.............shh02.....shh02
无重复元素,添加:[shh02,15]
shh03.....12
调用equals.............shh03.....shh01
调用equals.............shh03.....shh02
调用equals.............shh03.....shh02
无重复元素,添加:[shh03,12]
shh03.....12
调用equals.............shh03.....shh01
调用equals.............shh03.....shh02
调用equals.............shh03.....shh02
调用equals.............shh03.....shh03
[shh03,12]是重复元素,不添加!