-
为什么Set及子类中没有提供随机取元素的方法5
在List中提供了get等方法来实现随机取在容器中的元素,但是,为什么在Set中没有提供呢,如果要在Set及子类中实现随机读取元素,该怎么操作,不可能自己去遍历或将Set存到List中去吧。2012年3月20日 08:14
5个答案 按时间排序 按投票排序
-
采纳的答案
1.可以用Set的一下两个方法获取可以随机访问的数组:
引用Object[] toArray()
返回一个包含 set 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回一个包含 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
2.可以继承HashSet,使用复合数据结构:import java.util.ArrayList; import java.util.HashSet; public class ArraySet<E> extends HashSet<E> { private static final long serialVersionUID = -7548294595221509577L; private ArrayList<E> list = new ArrayList<E>(); /** * @param index * @return * @see java.util.ArrayList#get(int) */ public E get(int index) { return list.get(index); } @Override public boolean add(E o) { if (super.add(o)) { list.add(o); return true; } else return false; } @Override public boolean remove(Object o) { if (super.remove(o)) { list.remove(o); return true; } else return false; } @Override public void clear() { super.clear(); list.clear(); } }
自己抉择吧2012年3月20日 11:09
-
set是一个集合,集合就是一堆东西的意思,set中的东西是不重复的,即使你放了两个一样的东西,set只会保留一个;set是不能随机存取的,而且set的顺序是不固定的,读的顺序跟你存的顺序也是不同的,这是由set的性质决定的。而list是链表的意思,存取的顺序是固定的,所以可以随机读。如果要随机存取,那就用list吧。
2012年3月20日 09:42
-
以HashSet为例,源码中有这么几行代码
private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<E,Object>(); } public boolean add(E e) { return map.put(e, PRESENT)==null; }
可以明显看出,HashSet的本质是一个Map,Map的key就是HashSet加入的值,Map的value都是PRESENT(Object的实例)。Map是怎么存储的?HashMap是随机存储的,只能通过key来get,没有顺序遍历。
而List的本质是一个数组,当然可以通过get(index)获取
如果还不是很清楚,建议看看List ArrayList LinkedList Set HashSet TreeSet 的源码,也不要被源码吓到,很简单的,我都看懂了2012年3月20日 09:01
-
List是一个集合呀,里面有很多元素,怎么知道你去哪个呀?所以要遍历呀
例如 List list = new ArrayList();
list.set...
list.set.....
for(int i =0;i<list.size();i++){
System.out.println(list[i]);
}2012年3月20日 08:39
相关推荐
`Collection`提供了一组通用的方法来处理元素集合。 #### 1.2.1 常用方法 - `add(E e)`:向集合中添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `size()`:返回集合中元素的数量。 - `isEmpty()...
**为什么要使用容器?** - **动态调整大小**:容器可以根据需要动态扩展或缩小,不像数组那样需要预先指定大小。 - **消除重复元素**:某些类型的容器(如`Set`)能够确保其中的元素不重复。 - **键值对映射**:`Map...
本文将深入探讨标题和描述中提到的一些关键集合类型,包括Map、Set、List、Queue、Stack以及它们的特点和用法。 首先,Collection接口是所有集合类型的父接口,它分为两个主要子接口:List和Set。List接口用于存储...
可变参数的格式是在方法声明中使用省略号“...”来表示方法可以接受任意数量的参数,这些参数被视为一个数组。在方法体内,可以像操作数组一样访问可变参数。 集合工具类提供了许多静态方法来操作集合,如反转、洗...
在Android开发中,创建一个具有随机图片背景的EditBox控件可以为用户界面带来独特的视觉效果,提升用户体验。本文将详细讲解如何实现这样一个功能,并探讨其背后涉及的技术点。 首先,我们要了解EditBox(EditText...
它没有索引的概念,只提供元素的添加、删除和检查是否存在的方法。 4. **Iterator接口** Iterator接口是遍历集合的统一方式,提供hasNext()和next()方法,用于依次访问集合中的元素,而无需知道底层数据结构。 5....
Iterator接口用于遍历集合中的元素,提供了`next()`方法获取下一个元素,以及`hasNext()`方法判断是否还有更多元素,同时提供了`remove()`方法删除当前元素。 8.6 Map及HashMap接口: Map接口不同于Collection,它...
ArrayList提供了许多方法,如`add()`用于添加元素,`get()`用于获取元素,`set()`用于修改元素,以及`size()`用于获取元素数量。 **Stack** 是另一个重要的数据结构,它是ArrayList的一个子类,实现了Stack接口。...
这种方法利用了Python的字典数据结构,遍历列表的同时,如果元素不在字典中,则将其作为键,值为1;如果已存在,就增加其对应的值。 ```python List = [1,2,2,2,2,3,3,3,4,4,4,4] a = {} for i in List: if List....
接下来是抽象类,如AbstractCollection提供了Collection接口的默认实现,但像iterator()和size()这些方法需要子类具体实现。AbstractList和AbstractSet分别提供了List和Set接口的一部分默认实现,使得自定义集合类...
`abstract`关键字用于声明抽象类和抽象方法,抽象类不能被实例化,只能作为其他类的父类,而抽象方法没有具体实现,必须由其子类覆盖。 文件操作在Java中通常涉及`java.io`包中的类,如File、FileInputStream和...
Java容器类是Java编程中非常重要的一部分,它们为数据存储提供了丰富的结构和操作。本文主要关注的是Java中的两种主要容器类型:Collection和Map,以及它们的一些具体实现,如List接口下的ArrayList、LinkedList和...
根据 Java 集合框架中的定义,Java Set 集合中的元素是不可以重复的,Set 集合中的每个元素都是唯一的。 4. Java List 集合与 Java 数组相似,Java List 集合的长度也是固定的。错误 Java List 集合与 Java 数组...
同时,Collection接口提供了iterator()方法,使得可以通过迭代器遍历集合中的每个元素。Java SDK并未提供直接继承自Collection的类,而是通过其子接口如List和Set来实现具体的集合类。 List接口是Collection的一...
List接口中的方法如`add()`、`add(int index, E element)`、`addAll()`、`clear()`、`equals()`、`get()`、`hashCode()`、`remove()`、`removeAll()`、`retainAll()`和`set()`等,提供了对列表的常用操作。...
迭代器是遍历集合元素的主要方式,通过调用iterator()方法获取,然后使用hasNext()和next()方法来遍历集合中的每一个元素。迭代器还支持remove()方法,可以在遍历过程中删除元素。 1.3 LIST List接口继承自...
值得注意的是,Collection接口没有提供`get()`方法,这意味着不能通过索引来访问元素,而是通过迭代器进行访问。 2. **Set接口**:Set接口继承自Collection,它不允许重复元素。Set接口中常用的实现类有HashSet、...
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法...