集合code
Set
hashSet
无序,不可重复
public class Fish01 {
public static void main(String args[]) {
HashSet books = new HashSet();
//分别向books集合中添加两个A对象,两个B对象,两个C对象
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());
System.out.println(books);
}
}
class A{
@Override
public boolean equals(Object obj) {
return true;
}
}
class B {
@Override
public int hashCode() {
return 1;
}
}
//同时重写hashCode,equals方法,在集合中定义
class C {
@Override
public int hashCode() {
return 2;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
//result
/home/sha/software/jdk/jdk-8u171-linux-x64/jdk1.8.0_171/bin/java -........
[cn.shafish.B@1, cn.shafish.B@1, cn.shafish.C@2, cn.shafish.A@677327b6, cn.shafish.A@14ae5a5]
Process finished with exit code 0
C类中重写hashCode,equals。定义两个对象相同,hashCode定位对象的存储位置(C类中返回hashCode值相同),equals判断对象值是否相等(C类中返回true)
B类中两个对象的引用值是不相等的,因为对象在内存中的地址单元不同(对于引用类型来说,默认是比较两个对象引用的地址)
A类对象的hashCode不同
LinkedHashSet
元素的顺序总是与添加顺序一致(通过删除后再添加测试)
public class FIsh02 {
public static void main(String[] args) {
LinkedHashSet books = new LinkedHashSet();
books.add("Java");
books.add("LittleHann");
System.out.println(books);
//删除 Java
books.remove("Java");
//重新添加 Java
books.add("Java");
System.out.println(books);
}
}
//result
[Java, LittleHann]
[LittleHann, Java]
TreeSet
有序不重复
public class Fish03 {
public static void main(String[] args) {
TreeSet nums = new TreeSet();
//向TreeSet中添加四个Integer对象
nums.add(5);
nums.add(2);
nums.add(10);
nums.add(-9);
//输出集合元素,看到集合元素已经处于排序状态
System.out.println(nums);
//输出集合里的第一个元素
System.out.println(nums.first());
//输出集合里的最后一个元素
System.out.println(nums.last());
//返回小于4的子集,不包含4
System.out.println(nums.headSet(4));
//返回大于5的子集,如果Set中包含5,子集中还包含5
System.out.println(nums.tailSet(5));
//返回大于等于-3,小于4的子集。
System.out.println(nums.subSet(-3 , 4));
}
}
//result
[-9, 2, 5, 10]
-9
10
[-9, 2]
[5, 10]
[2]
List
ArrayList
可以在创建它们时就指定initialCapacity大小,这样可以减少重新分配的次数,提高性能
public class Fish04 {
public static void main(String[] args) {
List books = new ArrayList();
//向books集合中添加三个元素
books.add(new String("算法导论"));
books.add(new String("java编程思想"));
books.add(new String("第一行代码"));
System.out.println(books);
//将新字符串对象插入在第二个位置
books.add(1 , new String("疯狂Ajax讲义"));
for (int i = 0 ; i < books.size() ; i++ )
{
System.out.println(books.get(i));
}
//删除第三个元素
books.remove(2);
System.out.println(books);
//判断指定元素在List集合中位置:输出1,表明位于第二位
System.out.println(books.indexOf(new String("疯狂Ajax讲义"))); //①
//将第二个元素替换成新的字符串对象
books.set(1, new String("LittleHann"));
System.out.println(books);
//将books集合的第二个元素(包括)
//到第三个元素(不包括)截取成子集合
System.out.println(books.subList(1 , 2));
}
}
//result
[算法导论, java编程思想, 第一行代码]
算法导论
疯狂Ajax讲义
java编程思想
第一行代码
[算法导论, 疯狂Ajax讲义, 第一行代码]
1
[算法导论, LittleHann, 第一行代码]
[LittleHann]
Stack
Stack后进先出
public class Fish05 {
public static void main(String[] args) {
Stack v = new Stack();
//依次将三个元素push入"栈"
v.push("算法导论");
v.push("java编程思想");
v.push("第一行代码");
System.out.println(v);
//访问第一个元素,但并不将其pop出"栈"
System.out.println(v.peek());
System.out.println(v);
//pop出第一个元素
System.out.println(v.pop());
System.out.println(v);
}
}
//result
[算法导论, java编程思想, 第一行代码]
第一行代码
[算法导论, java编程思想, 第一行代码]
第一行代码
[算法导论, java编程思想]
评论已关闭