ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

集合框架-集合查阅的技巧

2021-10-24 20:01:58  阅读:137  来源: 互联网

标签:容器 技巧 查阅 元素 Collection -- 对象 集合


  1 集合类的由来:
  2    对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定
  3    就使用集合容器进行存储。
  4 
  5 集合特点:(数组和集合的区别)
  6 1,用于存储对象的容器。
  7 2,集合的长度是可变的。
  8 3,集合中不可以存储基本数据类型值。
  9 
 10 
 11 集合容器因为内部的数据结构不同,有多种具体容器。
 12 不断的向上抽取,就形成了集合框架。
 13 
 14 框架的顶层Collection接口:
 15 
 16 Collection的常见方法:
 17 
 18 1,添加。
 19     boolean add(Object obj):
 20     boolean addAll(Collection coll):
 21    
 22 2,删除。
 23     boolean remove(Object obj):
 24     boolean removeAll(Collection coll):
 25     void clear();
 26     
 27     
 28 3,判断:
 29     boolean contains(Object obj):
 30     boolean containsAll(Collection coll):
 31     boolean isEmpty():判断集合中是否有元素
 32 
 33 4,获取:
 34     int size():
 35     Iterator iterator():取出元素的方式:迭代器。
 36     该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
 37     所以该迭代器对象是在容器中进行内部实现的。
 38     对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器对象即可
 39     也就是iterator方法。
 40     
 41     Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
 42     //一个事物访问另外一个事物内部的成员,可以用内部类实现
 43     
 44 5,其他:
 45     boolean retainAll(Collection coll):取交集。
 46     Object[] toArray();将集合转成数组
 47 
 48 ------------------------
 49 Collection
 50     |--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
 51     |--Set:元素不能重复,无序。(有可能有序,因为如果你存的就是他这里面的顺序,你就会觉得是有序)
 52     
 53 List:特有的常见方法:有一个共性特点就是都可以操作角标。
 54 
 55 1,添加
 56     void add(index,element);
 57     void add(index,collection);
 58     
 59 
 60 2,删除:
 61     Object remove(index);
 62 
 63 3,修改:
 64     Object set(index,element);
 65     
 66 4,获取:
 67     Obejct get(index);
 68     int indexOf(object);
 69     int lastIndexOf(object);
 70     List subList(from,to);
 71 
 72 list集合是可以完成对元素的增删改查
 73 
 74 List:
 75     |--Vector:内部是数组数据结构。是同步的。效率低(是线程安全的) (增删,查询都很慢)jdk1.0就有
 76     |--ArrayList:内部是数组数据结构,是不同步的。效率高,替代Vector。(查询速度快)(要么给ArrayList加锁,要么用其他方式,vector一般就不用了)
 77     |--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快(适合频繁增删)空间不连续所以查询慢
 78                  LinkedList也是有索引的,但是你查的数据是不连续 所以可能是5 9 13这样的 
 79     
 80 LinkedList:
 81     addFirst();
 82     addLast();
 83     jdk1.6
 84     offerFirst();
 85     offerLast();
 86     
 87     getFirst();//获取但不移除,如果链表为空,抛出NoSuchElementEception
 88     getLast();
 89     jdk1.6
 90     peekFirst();//获取但不移除,如果链表为空,返回null
 91     peekLast();
 92     
 93     removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementEception
 94     removeLast();
 95     jdk1.6
 96     pollFirst();//获取并移除,如果链表为空,返回null
 97     pollLast();
 98     
 99 
100 
101 ----------------------------------
102 
103 
104 Set:元素不可以重复,是无序。
105     Set接口中的方法和Collection一致。
106     |--HashSet:内部数据结构是哈希表,是不同步的。
107         如何保证该集合的元素唯一性呢?
108         是通过对象的hashCode和equals方法来完成对象唯一性的。
109         如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
110         如果对象的hashCode值相同,那么再次判断对象的equals方向是否为true。
111         如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
112         
113         记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法,
114         一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法
115         建立对象判断是否相同的依据。
116         
117     |--TreeSet:可以对Set集合中的元素进行排序。是不同步的。
118                 判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
119                 
120                 TreeSet对元素进行排序的方式一:
121                 让元素自身具备比较功能,元素就需要实现Comparable接口覆盖compareTo方法
122                 
123                 如果不按照对象中具备的自然顺序进行排序。如果对象不具备自然顺序(对象可能不是我们自己定义的)
124                 可以使用TreeSet集合第二种排序方式二:
125                 让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法(不是compareTo哦)
126                 将该类对象作为参数传递给TreeSet集合的构造函数。
127 
128 哈希表确定元素是否相同
129  * 1,判断的是两个元素的哈希值是否相同。
130  *         如果相同,在判断两个对象的内容是否相同吧
131  * 2,判断哈希值相同,其实判断的是对象的hashCode方法。
132  * 判断内容相同,用的是equals方法。
133  * 
134  * 注意:如果哈希值不同,是不需要判断equals
135     
136 
137     
138     
139     
140     
141 --------------------------------------    
142     泛型:
143     jdk1.5出现的安全机制。
144     
145 好处:
146     1,将运行时期的问题ClassCastException转到了编译时期。
147     2,避免了强制转换的麻烦
148     
149 <>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可
150     其实<>就是一个接收具体引用数据类型的参数范围。
151 
152 在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。    
153 
154 泛型技术是给编译器使用的技术,用于编译时期。确保了类型安全
155 
156 运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。
157 为什么擦除呢?因为为了兼容运行的类加载器。
158 
159 泛型的擦除补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者再强制转换了
160 
161 泛型的通配符。?问号 (未知类型)
162 
163 void show(int x,int y)
164 
165 class Tool<e1,e2,e3,e4>
166 
167 
168 例如 Tool<String,Demo,Person,Integer> t = new Tool<String,Demo,Person,Integer>();
169 
170 
171 ===========================
172 
173 集合的一些技巧
174 
175 需要唯一吗?
176 需要: Set
177     需要指定顺序:
178             需要:TreeSet
179             不需要:HashSet
180             但是想要有个和存储一致的顺序(有序):LinkedHashSet
181 
182 不需要:List
183     需要频繁增删吗?
184         需要:LinkedList
185         不需要:ArrayList
186         
187 如何记住每一个容器的结构和所属体系?
188 
189 List
190     |--ArrayList
191     |--LinkedList
192     
193 Set
194     |--HashSet
195     |--TreeSet
196     
197 后缀名就是该集合所属的体系
198 前缀名就是该集合的数据结构、
199 
200 看到array:就要想要数组,就想到查询快,有角标。
201 看到link:就想到链表,就要想要增删快,就要想到add get remove+first last的方法 
202 看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode和equals方法。
203 看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable和Comparator
204 
205 而且通常这些常用的集合容器都是不同步的。
206 
207 
208 
209     
210     
211     
212     
213     
214     
集合框架文档

 

标签:容器,技巧,查阅,元素,Collection,--,对象,集合
来源: https://www.cnblogs.com/doremi429/p/15452475.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有