云顶娱乐平台:java库中具体集合

PriorityQueue 一种可以高效删除最小元素的集合

11.LinkedHashMap  可以记住键值添加次序的映射表

 

  • Python内置的数据结构
    • 序列Sequence
    • 映射Mapping
    • 集合Sets

LinkedList 一种可以在任何位置进行高效地插入和删除操作的有序序列

14.LinkedHashSet  可以记住插入次序的集合

 for(int i=0; i<list.size();i++){
    System.out.println(list.get(i));
    }
    2: 使用 迭代器(Iterator):
    Iterator it=list.iterator();
    while(it.hashNext){
    System.out.println(it.next);
    }

Python内置的数据结构

Python语言简洁明了,可以用较少的代码实现同样的功能。这其中Python内置的数据结构(可以统称为容器container)功不可没,主要是序列映射以及集合三类主要的容器,最常用的为以下四个子类:

  • list
  • tuple
  • dict
  • set

HashSet 一种没有重复元素的无序集合

4.TreeSet   有序集

  Java中的Iterator功能比较简单,并且只能单向移动:

映射Mapping

  • dict:字典
    • dict内置函数如下:
      • copy:返回一个字典的浅复制
      • fromkeys:以指定序列为键创建一个新字典,值都是一致的,使用场景很特定
      • update:以键批量更新的方法,(相同的更新,缺少的增补)
      • get:返回指定键的值,如果值不在字典中返回default值
      • setdefault:和get()类似,
        但如果键不存在于字典中,将会添加键并将值设为default
      • pop:删除字典给定键 key
        所对应的值,返回值为被删除的值;key值必须给出,否则返回default值
      • popitem:随机返回并删除字典中的一对键和值
      • clear:删除字典内所有元素,变为{}
      • items
      • keys
      • values

# 键必须是唯一的,但值则不必。# 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组# d = {key1 : value1, key2 : value2 }dict1 = { 'abc': 456,'sss':'sss',100:100 }dict2 = { 'abc': 123, 98.6: 37, 'sss':['a',3,5] }dict3 = dict.fromkeys([1,2,3], [1,2,3])   # {1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}# 访问/取值,依靠键dict2['abc']       # 返回123dict2.get('abc','no')   # 效果一样,但如果建不存在,会方法默认值,这里设为no,默认值的参数默认是Nonedict2.setdefault('s','sd') # 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default,default默认为None# 批量更新dict2.update # 相同的键,就更新值,缺少的键,直接增补print        # {98.6: 37, 100: 100, 'abc': 456, 'sss': 'sss'}# 删除print(dict2.pop("abc")) # 指定键,进行删除,并返回该键对应的值,如果键不存在,直接报错print(dict2.popitem  # 随机删除一对键值,并返回该对键值的元组形式# 遍历for k,v in dict2.items():    print(k,":",v)for k in dict2.keys():    printfor v in dict2.values():    print

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢
  2. 需要占用大量的内存,内存浪费多

而list相反:

  1. 查找和插入的时间随着元素的增加而增加
  2. 占用空间小,浪费内存很少

所以,dict是用空间来换取时间的一种方法

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法

HashMap 一种存储key:value关联的映射

13.IdentityHashMap   用==而不是equals比较键值的映射表

 list l = new ArrayList();
 l.add("aa");
 l.add("bb");
 l.add("cc");
 for (Iterator iter = l.iterator(); iter.hasNext();) {
  String str = (String)iter.next();
  System.out.println(str);
 }
 /*迭代器用于while循环
 Iterator iter = l.iterator();
 while(iter.hasNext()){
  String str = (String) iter.next();
  System.out.println(str);
 }
 */

集合Sets

  • set:可变集合
    • set和dict类似,也是一组key的集合,但不存储value;这些key既不重复,也无序
  • frozenset:不可变集合
set frozenset 说明
add y
clear y y
copy y
difference y y
difference_update y
discard y
intersection y y
intersection_update y
isdisjoint y y
issubset y y
issuperset y y
pop y
remove y
symmetric_differen y y
symmetric_difference_update y
union y y
update y

参考:

LinkHashSet 一种可以记住元素插入次序的集合

1.ArrayList   可以动态增长和缩减的索引序列

 

序列Sequence

  • list:列表,有序的 可变 序列
  • tuple:元组,有序的 不可变 序列
  • str:字符组成的 有序的 不可变 序列,字符可使用编码来理解
  • bytes:字节组成的 有序的 不可变 序列
    • (区别:字符串是字符组成的序列,以一个字符为单位;字节序列是字节组成的序列,以字节为单位)
  • bytearray:字节组成的 有序的 可变 序列

小技巧:查看一个类的内置方法

for _def in dir:    if "__" in _def:   # 内部方法跳过        continue    else:        print

对比list和tuple的结果如下:

append clear copy count extend index insert pop remove reverse sort
list y y y y y y y y y y y
tuple y y

PS:元组只不过是可读的列表,并由[]改为()

# 定义empty_list = []num_list = [1,2,3,4,5,6,7,8,9,10]mix_list = [1,"str",[1,2],[3,4]]empty_tuple = ()num_tuple = (1,2,3,4,5,6,7,8,9,10)mix_tuple = (1,"str",,[3,4])# 增empty_list.append("a")       # 插入元素,默认末端插入empty_list.append("b")empty_list.insert(0,"e")     # 指定位置插入元素empty_list.insert(-1,"e")empty_list.extend(["c","d"]) # 扩展,在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)empty_list.append(["c","d"])# 拼接print(num_list + mix_list)   # 拼接两个listprint(num_list * 3)          # 拼接三个相同的list# 删empty_list.remove("e") # 指定元素删除,# 移除列表中某个值的第一个匹配项empty_list.pop()       # 弹栈,删除末端的一个元素del(empty_list[-1])    # 非list内置方法del(empty_list)        # 整个对象删除,连变量名都不存在了empty_list.clear()     # 清空,变成空的列表[],变量还是存在的;与del不同,del后对象是不存在的,使用该变量的花会直接报错# 改empty_list[0] = 'change' # 查--切片printprint(num_list[0:2])print(num_list[:2])print(num_list[7:])print(num_list[7:-1])print(num_list[-3:])print(num_list[-3:-1])print(num_list[10:])print(num_list[0:-1:3]) # 间隔切片print(num_list[::3])    # 间隔切片# 查--检验print(4 in mix_list)print(4 in mix_list[-1])print(1 not in mix_list)# 查--计数print(len)        # 查看整个list的元素数量print(num_list.count   # 查看指定元素的数量# 查cmp(list1, list2)           # 比较两个列表的元素print(num_list          # 从列表中找出某个值第一个匹配项的索引位置print(len)        # 查看整个list的元素数量print(min)        # 返回列表元素最小值print(max)        # 返回列表元素最大值# 对象的复制num_copy = num_list.copy()  # 使用copy才会在内存中开辟新的内存去存储num_copy的值num_copy = num_list         # 简单的赋值语句只不过是两个不同的变量名指向同一块内存,感觉上就是改变一个,另一个也改变num_copy = list        # 将元组转换为列表# 顺序操作num_list.reverse()          # 反向列表中元素printnum_list.sort()             # 对原列表进行排序,模式升序,配合reverse(),升降序就都实现了print

ArrayDeque  一种用循环数组实现的双端队列

6.TreeMap  键值有序排列的映射表

  (2)
使用next()获得序列中的下一个元素。

目录

LinkedHashMap 一种可以记住插入次序的映射

3.HashSet  没有重复元素的无序集合

    Set 的 add()方法是如何判断对象是否已经存放在集合中?

ArrayList 一种可以动态增长和缩减的索引序列

5.HashMap  键值对关联的数据结构

1.java  Iterator 迭代器

TreeMap 一种key有序的映射

8.EnumSet   包含枚举类型值的值

 

TreeSet 一种有序集

7.  EunmMap  枚举类型的映射表

迭代器应用:

9.ArrayQueue  循环数组实现的双端队列

 

2.LinkedList 可以在任何位置高效插入和删除错左的有序序列

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

10.PriorityQueue  允许高效删除最小元素的集合

  (1)
使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

12.WeakHashMap  可以被垃圾回收期回收的映射表

    Map(映射):
    Map
是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。
    Map没有继承于Collection接口
    从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
    Map 的常用方法:     1 添加,删除操作:
    Object put(Object key, Object value): 向集合中加入元素
    Object remove(Object key):   删除与KEY相关的元素
    void putAll(Map t):   将来自特定映像的所有元素添加给该映像
    void clear(): 从映像中删除所有映射
    2 查询操作:
    Object get(Object key): 获得与关键字key相关的值
   
Map集合中的键对象不允许重复,也就说,任意两个键对象通过equals()方法比较的结果都是false.
    但是可以将任意多个键独享映射到同一个值对象上。
    Conllections : 集合实用类
    Conllections提供了供JAVA集合实用的静态方法
    总结:    
JAVA集合的基本用法,都归纳了,上面这些是平常最常用的JAVA集合,具体的其他的,还要参考JDK帮助文档了,呵呵
关于 Map的应用,还有很多,具体就是这个,Conllections提供了很多 List /Map
实用的方法,对平常开发非常有用。

boolean isExists=false;
    Iterator iterator=set.iterator();
    while(it.hasNext())           {
    String oldStr=it.next();
    if(newStr.equals(oldStr)){
    isExists=true;
    }
    }

boolean containsKey(Object key): 判断映像中是否存在关键字key
    boolean containsValue(Object value): 判断映像中是否存在值value
    int size(): 返回当前映像中映射的数量
    boolean isEmpty() :判断映像中是否有任何映射
   
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序–否则应该使用List)。Map同样对每个元素保存一份,但这是基于”键”的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用
LinkedHashSet或者LinkedHashMap.
    List的功能方法     实际上有两种List:
一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。
    List :
次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。
    ArrayList :
由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。
    LinkedList :
对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(),
addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(),
这些方法
(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
    Set的功能方法    
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
    Set :
存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
    HashSet :
为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
    TreeSet : 保存次序的Set,
底层为树结构。使用它可以从Set中提取有序的序列。
    LinkedHashSet :
具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
    Map的功能方法     方法put(Object key, Object
value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object
key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap,
TreeMap, LinkedHashMap, WeakHashMap,
IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
   
执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash
code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
   
HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能。
    Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
    HashMap :
Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load
factor,以调整容器的性能。
    LinkedHashMap :
类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
    TreeMap :
基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
    WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放:
这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
    IdentifyHashMap : 使用==代替equals()对“键”作比较的hash
map。专为解决特殊问题而设计。

JAVA集合可以存储和操作数目不固定的一组数据。

在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的
collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和
e2,并且最多包含一个 null 元素。

 Set set=new HashSet();
    String s1=new String("hello");
    String s2=s1;
    String s3=new String("world");
    set.add(s1);
    set.add(s2);
    set.add(s3);
    System.out.println(set.size());//打印集合中对象的数目 为 2。

  (3)
使用hasNext()检查序列中是否还有元素。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

2.java set

*   * 所有的JAVA集合都位于 java.util包中!
    JAVA集合只能存放引用类型的的数据,不能存放基本数据类型.
    JAVA集合主要分为三种类型:
    Set(集)
    List(列表)
    Map(映射)
    Collection 接口
   
Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。
    Set 和List 都继承了Conllection,Map没有
    Collection接口的方法:
    boolean add(Object o)   :向集合中加入一个对象的引用
    void clear()                       
:删除集合中所有的对象,即不再持有这些对象的引用
    boolean isEmpty()           :判断集合是否为空
    boolean contains(Object o): 判断集合中是否持有特定对象的引用
    Iterartor iterator()              :
返回一个Iterator对象,可以用来遍历集合中的元素
    boolean remove(Object o):从集合中删除一个对象的引用
    int size()                               :返回集合中元素的数目
    Object[] toArray()                
:返回一个数组,该数组中包括集合中的所有元素
    关于:Iterator() 和toArray()
方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。
    Iterator接口声明了如下方法:     hasNext(): 判断集合中元素是否遍历完毕,如果没有,就返回true
    next()       :返回下一个元素
    remove():从集合中删除上一个有next()方法返回的元素。
    Set(集合):
   
Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
    Set接口主要实现了两个实现类:
    HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
    TreeSet   :
TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
    Set 的用法:     存放的是对象的引用,没有重复对象
   

  (4)
使用remove()将迭代器新返回的元素删除。

List(列表):    
List的特征是其元素以线性方式存储,集合中可以存放重复对象。
    List接口主要实现类包括:
    ArrayList() :
代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与
    与删除元素的速度慢。
    LinkedList():
在实现中采用链表数据结构。插入和删除速度快,访问速度慢。
    对于List的随机访问来说,就是只随机来检索位于特定位置的元素。
    List 的 get(int index)
方法放回集合中由参数index指定的索引位置的对象,下标从“0” 开始。
    最基本的两种检索集合中的所有对象的方法: 云顶娱乐平台,    1: 用for循环和get()方法: