list 和 Set

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
一、Collection接口
  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
Set无序结合,不可重复
List有序集合,允许重复
(1)List接口
  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

Vector和ArrayList区别
Vector和ArrayList Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

(2)Set接口
  Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个 null元素。
  很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

(3)Map接口
  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

总结
  如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用 ArrayList。
  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
  要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

连接:http://blog.gxnews.com.cn/u/1/a/75979.html

更多Flex 4教程,请参见http://flex4jiaocheng.com
### Python `list` `set` 的区别与使用场景 #### 数据结构定义 - **List**: 是一种有序的数据容器,允许存储重复的元素。可以通过索引来访问其中的任意元素[^3]。 - **Set**: 是一种无序的数据容器,不允许存储重复的元素。它主要用于快速查找以及执行数学上的集合运算(如交集、并集等)[^1]。 #### 性能特点 - **插入操作**: - 对于 `list`,插入新元素的时间复杂度通常为 \(O(1)\),但如果涉及扩容,则可能达到 \(O(n)\)[^4]。 - 对于 `set`,由于内部实现基于哈希表,平均时间复杂度为 \(O(1)\)。然而,在最坏情况下可能会退化到 \(O(n)\)[^4]。 - **查找操作**: - 在 `list` 中进行线性扫描以查找某个特定值,其时间复杂度为 \(O(n)\)。 - 而在 `set` 中利用哈希机制可以实现常数级时间复杂度 \(O(1)\) 来判断某项是否存在。 - **删除操作**: - 删除指定位置处的一个项目对于 `list` 需要重新排列后续项目的顺序,因此耗时较长 (\(O(n)\)); - 使用 `set.remove()` 或者其他方法移除单个项目只需 \(O(1)\) 时间完成。 #### 应用场景分析 - 当需要维护一组保持原有次序不变且可能存在相同成员的对象集合时应选用 `list`;如果更关注唯一性高效检索速度的话则推荐采用 `set`。 - 如果程序逻辑涉及到大量的成员资格测试 (即检查某些对象是否存在于给定组内), 则应该优先考虑运用 sets 因为其效率远高于 lists。 - 另外值得注意的是sets非常适合用来做各种各样的组合计算比如求两个lists之间的共同部分或者差别的时候转换成sets再处理会更加简便快捷。 ```python # 示例代码展示如何创建操作这两个数据类型 my_list = ["apple", "banana", "cherry"] print(my_list[0]) # 访问第一个元素 'apple' my_set = {"dog", "cat", "bird"} if "dog" in my_set: print(True) # 输出 True 表示 dog 存在于 set 中 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值