为什么袋子被认为是未订购的?
Why are bags considered unordered?
包存储在数组中。我知道我们可以根据需要更改袋子的大小等。但是,由于它存储在数组中,所以它基本上有一个索引号,不是吗?既然如此,为什么我们还说它是无序的呢?
Bags are stored in arrays
不,他们不是。
实际上,它们 可能 取决于 实现 ,但它们肯定不必如此。这就像说 List
is stored in an array. That is e.g. true for an ArrayList
, but not true for a LinkedList
.
那么bag、list和set有什么区别呢?
A list 有序,允许重复
- 通常按值查找速度较慢。
ArrayList
实现使用数组,按位置快速查找。
LinkedList
实现使用双向链接节点,在列表开头有快速 insert/remove。
A set 无序,无重复
- 通常允许按值快速查找。
HashSet
实现是 无序的 。
LinkedHashSet
实现是 有序的。
TreeSet
实现是 sorted.
一个包是无序,允许重复
- 无内置 Java 支持。如果需要,通常只使用
List
。
如果需要按值快速查找,建议使用第三方库。
术语的 定义 指定了 有序 与 无序 语义。包 的实现可能 碰巧保持排序,但通用术语 bag.
不需要它
Java.
中关于 bags 的困惑让我们来澄清一下
Java 运行时库没有任何 Bag
类型。
Apache Commons Collections™ library has a Bag
interface that implements java.util.Collection
, although it violates the Collection
contract. It has a HashBag
and a TreeBag
实现,但没有使用数组实现。
GoogleGuava library has a bag interface named Multiset
that also implements java.util.Collection
. It has HashMultiset
, LinkedHashMultiset
, and TreeMultiset
实现,但没有使用数组实现。
Hibernate ORM has a Bag
class.
其中None个指定bag为list,none个使用array实现bag
包存储在数组中。我知道我们可以根据需要更改袋子的大小等。但是,由于它存储在数组中,所以它基本上有一个索引号,不是吗?既然如此,为什么我们还说它是无序的呢?
Bags are stored in arrays
不,他们不是。
实际上,它们 可能 取决于 实现 ,但它们肯定不必如此。这就像说 List
is stored in an array. That is e.g. true for an ArrayList
, but not true for a LinkedList
.
那么bag、list和set有什么区别呢?
A list 有序,允许重复
- 通常按值查找速度较慢。
ArrayList
实现使用数组,按位置快速查找。LinkedList
实现使用双向链接节点,在列表开头有快速 insert/remove。
A set 无序,无重复
- 通常允许按值快速查找。
HashSet
实现是 无序的 。LinkedHashSet
实现是 有序的。TreeSet
实现是 sorted.
一个包是无序,允许重复
- 无内置 Java 支持。如果需要,通常只使用
List
。
如果需要按值快速查找,建议使用第三方库。
- 无内置 Java 支持。如果需要,通常只使用
术语的 定义 指定了 有序 与 无序 语义。包 的实现可能 碰巧保持排序,但通用术语 bag.
不需要它Java.
中关于 bags 的困惑让我们来澄清一下Java 运行时库没有任何
Bag
类型。Apache Commons Collections™ library has a
Bag
interface that implementsjava.util.Collection
, although it violates theCollection
contract. It has aHashBag
and aTreeBag
实现,但没有使用数组实现。GoogleGuava library has a bag interface named
Multiset
that also implementsjava.util.Collection
. It hasHashMultiset
,LinkedHashMultiset
, andTreeMultiset
实现,但没有使用数组实现。Hibernate ORM has a
Bag
class.
None个指定bag为list,none个使用array实现bag