LinkedList
内部是链表数据结构,是不同步的。增删元素的速度很快
package day17;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
/**
* @param args
*/
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.addFirst("abc1");
link.addFirst("abc2");
link.addFirst("abc3");
link.addFirst("abc4");
// System.out.println(link);
// System.out.println(link.getFirst());//获取第一个但不删除。
// System.out.println(link.getFirst());
// System.out.println(link.removeFirst());//获取元素但是会删除。
// System.out.println(link.removeFirst());
while(!link.isEmpty()){
System.out.println(link.removeLast());
}
System.out.println(link);
// Iterator it = link.iterator();
// while(it.hasNext()){
// System.out.println(it.next());
// }
}
}
哈希表
哈希表确定元素是否相同
1、判断的是两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同
2、判断哈希值相同,其实是判断对象的hashcode的方法,判断内容相同用的是equals方法
注意:如果哈希值不同,不需要判断equals
package day17;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
/**
*
* @param args
*/
public static void main(String[] args) {
HashSet hs=new HashSet();
hs.add("hahaa");
hs.add("xixi");
hs.add("hehe");
hs.add("heihei");
Iterator it=hs.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
private static HashSet add(String string) {
// TODO Auto-generated method stub
return null;
}
}
练习: 往hashSet集合中存储Person对象。如果姓名和年龄相同,视为同一个人。视为相同元素。
首先创建一个实体类,定义Person属性及获取方法
package day17;
public class Person /*extends Object*/ implements Comparable {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public int hashCode() {
System.out.println(this+".......hashCode");
return name.hashCode()+age*27; //将age和name设置成为hashCode。
// return 100;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(!(obj instanceof Person))
throw new ClassCastException("类型错误");
System.out.println(this+"....equals....."+obj);
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.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;
}
public String toString(){
return name+":"+age;
}
@Override
public int compareTo(Object o) {
Person p = (Person)o;
int temp = this.age-p.age;
return temp==0?this.name.compareTo(p.name):temp;
// int temp = this.name.compareTo(p.name);
// return temp==0?this.age-p.age:temp;
/*
if(this.age>p.age)
return 1;
if(this.age<p.age)
return -1;
else{
return this.name.compareTo(p.name);
}
*/
}
}
创建对象
package day17;
import java.util.HashSet;
import java.util.Iterator;
/*
* 往hashset集合中存储Person对象。如果姓名和年龄相同,视为一个人,视为相同
*/
public class HashSetTest {
public static void main(String[] args) {
HashSet hs = new HashSet();
/*
* HashSet集合数据结构是哈希表,所以存储元素的时候,
* 使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。
*
*/
hs.add(new Person("lisi4",24));
hs.add(new Person("lisi7",27));
hs.add(new Person("lisi1",21));
hs.add(new Person("lisi9",29));
hs.add(new Person("lisi7",27));
Iterator it = hs.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p);
// System.out.println(p.getName()+"...."+p.getAge());
}
}
}