Set(集) 集合中的对象不按特定方式排序,并且没有重复对象
List(列表):集合中的对象按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象
Map(映射):集合中的没一个元素包含键对象和值对象,不允许有重复的键对象
Java HashSet
继承于Set接口,不允许有重复的元素
1. 继承结构
java.lang.Object
|_ java.util.AbstractCollection<E>
|_ java.util.AbstractSet<E>
|_ java.util.HashSet<E>
2. 主要方法
add(Object)
addAll(Collection)
remove(object)
removeAll(Collection)
size()
iterator()
toArray()
clear()
isEmpty()
contain(object)
containAll(Collection)
3. 不允许出现相同的项
Set集合中不允许出现相同的项,Set集合在用Add()方法添加一个新项时,首先会调用equals(Object o)来比较新项和已有的某项是否相等,而不是用==来判断相等性,所以对于字符串等已重写equals方法的类,是按值来比较相等性的
Set<String> setA=(Set<String>)new HashSet();
setA.add(new String("ABC"));
setA.add(new String("CC"));
setA.add(new String("ABC"));
setA.add(new String("BB"));
setA.add(new String("ABC"));
System.out.println("size="+setA.size()); //3, 相同的项不存储
Iterator<String> ite=setA.iterator();
while(ite.hasNext()){
System.out.println(ite.next());//CC BB ABC
}
4. 哈希算法
在set类型的集合中,如何判断元素是否重复呢,这就需要使用Object.equals方法,但如果元素很多了,添加一个新元素时,比较的次数 就很多,例如已经有100个元素了,添加第101个元素时,就要和前面的元素比较100次,效率很低。
JAVA中采用哈希表的原理,哈希是个人名,它提出了哈希算法的概念,哈希算法也称为散列算法,是将数据依据酸法直接指定到一个地址上,
hascode实际上是返回的对象存储的物理地址
HashSet类按照哈希算法来存取对象,当向集合中加入一个新对象时,会调用对象的HashCode()方法得到对象的哈希码,然后根据这个码计算出对象在集合中存储的位置。
Object类中定义了hashCode()和equals(Object o)方法,如果object1.equals(object2),那么说明这两个引用变量指向同一个对象,那么object1 and object2的hashCode也一定相等
为了保证HashSet能正常工作,要求当两个对象用equals比较相等时,hashCode也要相等,否则就会有可能加入两个相同的项。
public class Person {
private String name;
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean equals(Object o){
if(this==o)return true;
if(!(o instanceof Person))
return false;
final Person p=(Person)o;
if(this.name.equals(p.getName()))
return true;
else
return false;
}
}
Set<Person> setA=(Set<Person>)new HashSet();
Person A=new Person();
A.setAge(24);
A.setName("Jack");
Person B=new Person();
B.setAge(24);
B.setName("Jack");
setA.add(A);
setA.add(B);
System.out.println("size="+setA.size()); //2
虽然A与B用equals比较相等,但因为HashCode不同,HashSet为A和B计算出了不同的存储位置,于是把他们放到了集合的不同位置
可以重写hascode和equas方法
例如:
public int hasCode(){
int result;
result=(this.name==null?0:name.hashCode());
result=37*result+(this.age==null?0:age.hashCode());
return result;
}
5. TreeSet类
当向TreeSet集合中加入一个对象时,会把他插入到有序的对象序列中,
自然排序和客户化排序
JDK中的一些类, Interger,Double,String等实现了 Comparable 接口, 它有一个CompareTo(object o)方法, TreeSet调用CompareTo方法比较对象, 加入持久化对象时应实现Comparable接口,并重写compareTo,equals,hashcode三个方法
客户化排序需要实现java.util.Comparator接口,并重写compare(Object o1, object o2);
public class CustomerComparator implements Comparator{
public int compare(Object o1, Object o2){
Customer c1 = (Customer) o1;
customer c2 = (Customer) o2;
if(c1.getName().compareTo(c2.getName())>0)
return -1;
else
return 1;
return 0;
}
}
Set set = new TreeSet(new CustomerComparator());
set.add(new Customer("Tom",15));
set.add(new Customer("Jack",17));
......
6. List只能对集合中的对象按索引位置排序,如果希望LIST中的对象按其他特定方式排序,可以借助Comparator接口和Collections类
Collections.sort(List list)
Collections.sort(List list, Comparator comparator)
分享到:
相关推荐
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
Java HashSet集合存储遍历学生对象代码实例 Java HashSet集合是一种基于哈希表的集合实现,用于存储元素的集合。在本文中,我们将通过一个实例,介绍如何使用Java HashSet集合来存储和遍历学生对象,并解决添加重复...
Java HashSet 详解 Java HashSet 是 Java 集合框架中的一种重要数据结构,它提供了一个不允许有重复元素的集合。HashSet 是基于 HashMap 实现的,它允许有 null 值,但不记录插入的顺序,也不是线程安全的。 ...
在Java编程语言中,ArrayList和HashSet是两种常用的集合类,它们各自有其特性和应用场景。在实际开发中,理解它们的差异以及如何有效地利用它们是非常重要的。本篇将深入探讨ArrayList与HashSet的区别,并分析...
Java集合框架包括接口(如List、Set、Queue)和实现类(如ArrayList、LinkedList、HashSet、HashMap等)。理解各种集合的区别,以及它们的实现方式和应用场景,是提升编程效率的关键。例如,List接口中的ArrayList和...
`HashSet`是Java集合框架的一部分,它实现了`Set`接口。`HashSet`不允许重复的元素,并且不保证元素的顺序。此外,`HashSet`是非同步的,这意味着多线程环境下的安全问题需要通过外部同步机制解决。 #### 二、特点 ...
随机数,HsahSet,排序,输出.随机数,HsahSet,排序,输出.
当我们在HashSet中添加一个元素时,Java会先计算该元素的哈希码,然后根据哈希码决定该元素在底层HashMap中的位置。如果两个元素的哈希码相同,它们会被放在同一个桶(bucket)中。为了避免冲突,Java还使用了equals...
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
在Java编程语言中,集合框架是处理对象数组的重要工具,提供了高效的数据组织和操作方式。本教程将聚焦于三个特定的集合类:`Vector`、`Stack`和`HashSet`,通过小型示例来深入理解它们的特点和用法。 首先,`...
本篇文章将详细讲解Java中的基本集合类ArrayList、LinkedList和Vector,以及HashSet和TreeSet。 1. ArrayList ArrayList是基于动态数组实现的集合类,它允许存储重复元素。默认初始容量为10,当添加元素超过容量时...
2. **避免重复**:为了确保生成的数字不重复,我们可以使用`java.util.HashSet`。HashSet是一个不允许重复元素的集合,每次添加新元素时,如果该元素已存在,添加操作将失败。这样,我们可以通过不断向HashSet中添加...
1. 散列集合:在Java中,HashSet是散列集合的一个典型代表。它通过哈希算法来存储元素,确保元素的唯一性。HashSet不保证元素的顺序,但插入和查找速度非常快。例如,你可以创建一个HashSet,然后添加元素,检查元素...
在Java编程中,HashSet是一个非常重要的集合类,它继承自AbstractSet并实现了Set接口。HashSet不包含重复元素,也不保持元素的顺序。本篇将详细讲解如何利用Java的HashSet类来删除学生对象,以及HashSet的一些核心...
Java HashSet的实现原理 HashSet是Java集合框架中的一种set实现,它的实现原理主要基于HashMap。下面我们将详细介绍HashSet的实现原理。 首先,HashSet是Set的一个实现,所以它保证了其中没有重复的元素。在...
Java API,全称为Java应用程序接口,是Java编程语言的核心组成部分,包含了各种类库、接口和异常,为开发者提供了丰富的功能,极大地提高了开发效率。本文将深入探讨Java API中的一些常见且重要的类和方法,结合实际...
Java HashSet 和 TreeSet 的区别详解 HashSet 和 TreeSet 是 Java 中两个常用的集合类,它们都实现了 Set 接口,但它们之间有很大的区别。本文将详细介绍 HashSet 和 TreeSet 的区别,帮助大家更好地理解和使用这些...
总的来说,Java提供了多种方式对对象进行排序,包括ArrayList的`Collections.sort()`,HashSet的转换和排序,以及TreeSet的自然排序和Comparator排序。理解这些机制可以帮助我们更好地控制数据结构的排序行为,从而...
在Java编程语言中,插入新元素是常见的操作,无论是在数组、集合还是其他数据结构中。下面我们将深入探讨Java中如何向不同的数据结构插入新元素。 1. 数组: Java中的数组是一种固定大小的数据结构,一旦声明,...