您的位置:首页 > 编程语言 > Java开发

java学习笔记11--集合总结

2014-12-12 23:40 519 查看
java学习笔记系列:

java学习笔记10--泛型总结

java学习笔记9--内部类总结

java学习笔记8--接口总结

java学习笔记7--抽象类与抽象方法

java学习笔记6--类的继承、Object类

java学习笔记5--类的方法

java学习笔记4--对象的初始化与回收

java学习笔记3--类与对象的基础

java学习笔记2--数据类型、数组

java学习笔记1--开发环境平台总结

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note11.html,转载请注明源地址。

Java集合框架概述

集合就是将若干用途相同、近似的“数据”结合成一个整体。

集合从体系上分为三种:

(1) 列表(List):List集合区分元素的顺序,允许包含相同的元素。

(2) 集(Set):Set集合不区分元素的顺序,不允许包含相同的元素。

(3) 映射(Map):Map集合保存的”键”-“值”对,“键”不能重复,而且一个“键”只能对应一个“值”。

Java集合中只能保存引用数据类型,也就是保存的是对象的地址,而非对象本身。集合中元素相当于引用类型的变量。

JDK所提供的容器API全部位于java.util包中。
Java集合主要包括三种类型:Set(集),List(列表),Map(映射)。

Java集合类框图:

Hashtable  aPhoneBook = new Hashtable();
aPhoneBook.put("Zhu Yongqin", "010-82957788");
aPhoneBook.put("Liu Na", "010-80791234");
aPhoneBook.remove("Zhu Yongqin");
aPhoneBook.remove("010-80791234");  // 不出错,但返回null
System.out.println(aPhoneBook);  // 显示{ Liu Na=010-80791234}


View Code

boolean isEmpty() —— 判断哈希表是否为空
boolean containsKey(Object key) —— 判断给定的关键字是否在哈希表中
boolean contains(Object value) —— 判断给定的值是否在哈希表中
boolean containsValue(Object value) —— 判断给定的值是否在哈希表中
void clear() —— 将哈希表清空
Enumeration elements() —— 返回包含值的Enumeration对象
Enumeration keys() —— 返回包含关键字的Enumeration对象


HashMap类与HashTable类很相似,只是HashTable类不允许有空的关键字,而HashMap类允许

Set接口以及实现类

Set是最简单的集合,集合中的对象不按照特定的方式排序,并且没有重复的对象。Set接口主要有两个实现类:HashSet和TreeSet

Set集合里多个对象之间没有明显的顺序,基本与Collection方法相同。只是行为不同(Set不允许包含重复元素)。Set集合不允许重复元素,是因为Set判断两个对象相同不是使用==运算符,而是根据equals方法。即两个对象用equals方法比较返回true

public class TestSet {
public static void main(String[] args) {
Set<String> books = new HashSet<String>();
//添加一个字符串对象
books.add(new String("Struts2权威指南"));
//再次添加一个字符串对象,
//因为两个字符串对象通过equals方法比较相等,所以添加失败,返回false
boolean result = books.add(new String("Struts2权威指南"));
System.out.println(result);
//下面输出看到集合只有一个元素
System.out.println(books);
}
}


程序运行结果:

false
[Struts2权威指南]

说明:程序中,book集合两次添加的字符串对象明显不是一个对象(程序通过new关键字来创建字符串对象),当使用==运算符判断返回false,使用equals方法比较返回true,所以不能添加到Set集合中,最后只能输出一个元素。Set接口中的知识,同时也适用于HashSet、TreeSet和EnumSet三个实现类。

HashSet类

HashSet按Hash算法来存储集合的元素,因此具有很好的存取和查找性能。

HashSet的特点:

(1)HashSet不是同步的,多个线程访问是需要通过代码保证同步

(2)集合元素值可以使null。

HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。

//类A的equals方法总是返回true,但没有重写其hashCode()方法
class A
{
public boolean equals(Object obj)
{
return true;
}
}
//类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B
{
public int hashCode()
{
return 1;
}
}
//类C的hashCode()方法总是返回2,但没有重写其equals()方法
class C
{
public int hashCode()
{
return 2;
}
public boolean equals(Object obj)
{
return true;
}
}
public class TestHashSet
{
public static void main(String[] args)
{
HashSet<Object> books = new HashSet<Object>();
//分别向books集合中添加2个A对象,2个B对象,2个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);
}
}


程序运行结果:

[B@1, B@1, C@2, A@b5dac4, A@9945ce]

TreeSet类

TreeSet是SortedSet接口的唯一实现,TreeSet可以确保集合元素处于排序状态(元素是有序的)。

TreeSet提供的几个额外方法:

Comparator comparttor(): 返回当前Set使用的Compara投入,或者返回null,表示以自然方式排序。

Object first():返回集合中的第一个元素。

Object last():返回集合中的最后一个元素。

Objiect lower(Object e):返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,参考元素可以不是TreeSet的元素)。

Object higher(Object e):返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,参考元素可以不需要TreeSet的元素)。

SortedSet subSet(fromElement, toElement):返回此Set的子集,范围从fromElement(包含大于等于)到toElement(不包含小于)。

SortedSet headSet(toElement):返回此Set的子集,由小于toElement的元素组成。

SortedSet tailSet(fromElement):返回此Set的子集,由大于或等于fromElement的元素组成。

public class TestTreeSetCommon
{
public static void main(String[] args)
{
TreeSet<Integer> nums = new TreeSet<Integer>();
//向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));
}
}


说明:由运行结果可以看出,TreeSet并不是根据元素的插入顺序进行排序,而是根据元素实际值来进行排序。TreeSet采用红黑树的数据结构对元素进行排序,具体排序内容会在后续文章中说明。

参考资料

/article/5423223.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: