- 浏览: 48470 次
- 性别:
- 来自: 南京
-
文章分类
最新评论
HashSet中不允许有重复的元素。例如: Set hashSet = new HashSet(); hashSet.add(new String("aaa")); hashSet.add(new String("bbb")); hashSet.add(new String("ccc")); hashSet.add(new String("aaa")); hashSet.add(new String("aaa")); 通过hashSet.size()获取它含有元素的个数,上面去掉重复的元素后,hashSet.size()=3。也就是说,在向HashSet中添加(add())元素的时候,对于重复的元素,只在HashSet中保留一个副本。 另外,HashSet中元素的顺序是随机的,包括添加(add())和输出都是无序的。 对HashSet集合的一些常用操作: add(Object) :添加元素(Object); addAll(Collection) :向HashSet中添加一个集合(Collection); remove(Object) :删除一个指定的元素(Object); removeAll(Collection) :删除一个指定的集合(Collection); size() :HashSet的容量,即HashSet内元素的个数; isEmpty() : 判断HashSet是否为空,即[]或size()=0,返回true或false; contains(Object) :判断某个元素(Object)是否在HashSet中,返回true或false; containsAll(Collection):判断HashSet是否包含某个集合(Collection); clear() :清空HashSet,使得size()=0; toArray() :将HashSet转换成一个Object[]; iterator() :构造一个HashSet迭代器,用于输出HashSet中的元素 使用迭代器输出HashSet中的元素,例如: Iterator it = hashSet.iterator(); while(it.hasNext()){ System.out.println((String)it.next()); } 假设有一个Person类: 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; } } 构造两个Person的实例: Person p1 = new Person(); p1.setName("shirdrn"); p1.setAge(new Integer(26)); Person p2 = new Person(); p2.setName("shirdrn"); p2.setAge(new Integer(26)); 加入到HashSet中: Set hashSet = new HashSet(); hashSet.add(p1); hashSet.add(p2); 按理说,加入的这两个Person实例是相同的,HashSet应该只选择一个添加到集合里面。其实不然,此时的hashSet.size()=2。 这主要是由于Object拥有hashCode()和equals()两个方法,它认为具有相同的hashcode的对象才是同一个对象,即对同一个对象的引用。 所以必须在对应的实体类中重写hashCode()和equals()两个方法。在Person类中重写hashCode()和equals()两个方法,如下所示: public boolean equals(Object o){ if(this == o){ return true; } if(! (o instanceof Person)){ return false; } final Person other = (Person)o; if(this.name.equals(other.getName()) && this.age.equals(other.getAge())){ return true; } else{ return false; } } public int hashCode(){ int result; result = (name == null?0:name.hashCode()); result = 37*result + (age == null?0:age.hashCode()); return result; } 这时,再进行上面的测试,发现hashSet.size()=1。此时,对象p1和p2具有相同的hashcode,HashSet认为添加的两个Person实例是同一个对象,只把一个添加到集合里面。
发表评论
-
Non-terminating decimal expansion; no exact representable decimal result
2015-05-20 09:46 895异常信息:Non-terminating decimal ex ... -
java中静态代码块的用法 static用法详解
2013-06-18 17:14 811(一)java 静态代码块 ... -
java中的native关键字
2013-06-18 14:35 911JNI是Java Native Interface的 缩写。从 ... -
Java fina 方法和类
2013-06-18 14:34 869final方法 将方法声明为final那有两个原因: ... -
Java transient关键字
2013-06-18 14:33 840java关键字Transient 转自http:/ ... -
Java Assert使用
2013-06-14 14:01 1309主要总结一下在eclipse中如何使用断言。 (一)首先明确 ... -
Java中接口的使用方法简介
2013-06-14 13:48 2344接口申明必须有interface ... -
堆和栈的区别
2013-06-14 12:50 804堆和栈的区别 栈与堆 ... -
java i++和++i
2012-08-28 10:30 742//i++是在一个先使用后加1,即先使用i的值,后让i+1 ... -
java 可变长参数
2012-08-15 17:08 900有时候,我们传入到方法的参数的个数是不固定的,为了解决这个问题 ... -
字符编码问题
2012-07-26 16:14 813String newStr = new String(oldS ... -
java发邮件包commons-email-1.0.jar
2012-07-26 16:11 941java发邮件的包commons-email-1.0.jar -
获取图片的宽和高 java
2012-07-26 16:09 978有两种要考虑的情况: 一种是:(图片在本地可以预览到),方法如 ... -
java 值传递和引用传递
2012-07-26 14:52 1142class Demo{ private static i ... -
java面试题解惑 之 多线程(转)
2012-07-20 15:25 10401,多线程 线程或者说 ... -
java定时器应用举例
2012-07-20 14:32 775package myThread; import jav ... -
Java中的IO整理完整版(二)
2012-07-12 16:41 651BufferedReader的小例子 注意: Buffere ... -
Java中的IO整理完整版(一)
2012-07-12 14:22 796【案例1】创建一个新文件 import java.io.*; ...
相关推荐
3. HashSet 要求放入的对象必须实现 hashCode() 方法,放入的对象,是以 hashCode 码作为标识的,而具有相同内容的 String 对象,hashCode 是一样的,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例...
- 不可重复:集合中不能有重复的元素。 - 大部分实现类都是无序的,即元素的存储顺序与插入顺序不同。 - **实现类**: - `HashSet`:基于哈希表实现,提供高效的增删查操作,但元素无序。 - `LinkedHashSet`:...
- **`HashSet`**:基于哈希表实现,插入和查找效率高,元素无序。 - **`TreeSet`**:基于红黑树实现,保持元素自然排序,支持快速查找,但插入和删除较慢。 - **`LinkedHashSet`**:结合了`HashSet`和链表的特点...
- `HashSet`:基于HashMap实现,不保证元素顺序,允许null元素,不允许重复元素。 - `TreeSet`:基于TreeMap实现,元素按自然顺序或自定义比较器排序,不允许null元素。 **HashSet与TreeSet的区别**: - 排序:...
- `HashSet`:适用于存储无序且不重复的元素。 - `TreeSet`:适用于存储有序且不重复的元素。 ### 练习 通过实践,尝试使用不同的集合类型解决实际问题,例如,统计一段文本中单词出现的频率,或管理一个在线课程...
- **HashSet与HashMap**:存储无序不重复元素,HashSet基于哈希表,HashMap存储键值对,也基于哈希表。 - **接口与泛型**:Interface定义行为规范,泛型提供类型安全,避免强制类型转换。 5. **IO流** - **输入...
- `HashSet`:基于哈希表实现,插入顺序无序。 - `LinkedHashSet`:保持了元素的插入顺序。 - `TreeSet`:基于红黑树实现,能够按照自然排序或自定义比较器排序。 - **List**:同样继承自`Collection`接口,但是...
HashSet内部的元素存储是基于对象的哈希值,这使得元素的插入和查找具有O(1)的时间复杂度。HashSet允许存储一个null元素,但不允许元素重复。以下是对HashSet关键方法的源码分析: 1. 构造器: - `HashSet()`:...
Java中的Set接口是基于集合概念实现的,它不包含重复元素。Set接口继承自Collection接口,并提供了多种实现类,如HashSet、LinkedHashSet、TreeSet和CopyOnWriteArraySet等。这些实现类各自有不同的特性和使用场景。...
- `Set<E>`:无序且不可重复元素的集合。 - `Map,V>`:键值对集合。 - **类**: - `ArrayList<E>`:基于数组的列表实现。 - `LinkedList<E>`:基于链表的列表实现。 - `HashSet<E>`:基于哈希表的集合。 - `...
- `Set`:无序且不允许重复元素的集合。 - `HashSet`:基于哈希表实现,提供快速添加、删除和查找操作。 - `LinkedHashSet`:维持元素的插入顺序。 - `TreeSet`:基于红黑树实现,自动排序。 - `Queue`:先进先...
1. **Collection**:这是一个顶级接口,用于表示一组对象,这些对象可以是可变的或不可变的、有序的或无序的、允许重复或不允许重复。`Collection`接口下有三个重要的子接口:`List`、`Set`和`Queue`。 - `List`:...
- **集合**:集合是一种容器,它可以包含任意数量的对象,并且不允许有重复元素。集合通常用于处理无序的数据集。 - **映射**:映射是一种容器,它将键(key)与值(value)关联起来。映射用于处理有序或无序的键值对...
- **Set**:无序的不重复元素集合。 - **Sorted Set**:有序的不重复元素集合,根据分数排序。 9. **HashMap、HashSet和HashTable的区别** - **HashMap**:非同步,键唯一,允许空值。 - **HashTable**:同步,...
- 数据结构:HashSet使用哈希表,元素无序且不可重复;TreeSet使用红黑树,元素自动排序且不可重复。 - 操作性能:HashSet插入和查找速度快,但不保证元素顺序;TreeSet插入和查找速度略慢,但能提供排序功能。 **...
- **HashSet**:使用哈希表实现,元素无序。 - **TreeSet**:使用红黑树实现,元素按自然顺序排序。 #### 18. 垃圾回收的目的 - 自动管理和释放不再使用的对象所占用的内存资源,避免内存泄漏。 #### 19. 堆、栈...
- **Set**:无序且不可重复元素的集合,元素唯一性由其自身或存储它的集合确定。 - **Map**:键值对集合,键唯一,值可重复。 ##### 6. Array 与 ArrayList 的区别 - **Array**:固定长度,可以存储基本数据类型或...
- `HashSet`: 无序且不允许重复元素。 - `LinkedHashSet`: 维持插入顺序。 - `TreeSet`: 排序并保持唯一性。 - **Map**: - `HashMap`: 基于哈希表。 - `Hashtable`: 同步的`HashMap`。 - `WeakHashMap`: 使用...
* Set:一种特殊的 Collection,用于存储无序的对象,例如 HashSet、TreeSet 等。 * Map:用于存储键值对的容器,例如 HashMap、TreeMap 等。 1.2 COLLECTION Collection 是 Java 中最基本的容器接口,它提供了...