天天看点

集合框架

HashSet集合:

  add方法:是添加方法,用于将添加对象添加到数组里。例如:

<a href="https://s1.51cto.com/oss/201710/26/3ee673302e9f5bd92dd078397547a1bd.png" target="_blank"></a>

  addAll方法:是批量添加方法,可以利用一个集合先把数据都添加到这个集合里,然后再拿到这个集合对象使用批量添加方法将这个集合对象添加到指定的集合里,就实现了批量添加:

<a href="https://s1.51cto.com/oss/201710/26/9568ec09accd869efbaa141986875b40.png" target="_blank"></a>

remove:删除方法,可以删除指定的某个元素,会把集合的元素也删除掉:

<a href="https://s5.51cto.com/oss/201710/26/29dcb1761b0f48a56ae8286a8ea6dd3e.png" target="_blank"></a>

  removeAll:批量删除方法,同样的可以利用一个集合先把需要数据都添加到这个集合里,然后再拿到这个集合对象使用批量删除方法将这个集合对象添加到指定的集合里,就实现了批量删除:

<a href="https://s1.51cto.com/oss/201710/26/6803806ccd5529611a9bfe31d83a4a8a.png" target="_blank"></a>

retainAll:交集删除,删除传递过去的这个集合里没有的元素:

<a href="https://s5.51cto.com/oss/201710/26/9bb92b09b68cd749d7a31634a90e04d9.png" target="_blank"></a>

clear:清除所有数据方法,可以将集合里的数据全部删除:

<a href="https://s4.51cto.com/oss/201710/26/051059a1e7964464b2be2d4793be8983.png" target="_blank"></a>

isEmpty:可以用于判断一个变量是否有初始化,换句话说就是判断里面是不是没有数据,有数据会就返回false,没有数据就会返回true,返回值是boolean类型:

<a href="https://s5.51cto.com/oss/201710/26/daa2a09a8c6e92fc40d59021d7a172ed.png" target="_blank"></a>

contains:判断某个集合是否含有某个元素,有酒返回true,没有则返回false,返回值是boolean类型:

<a href="https://s5.51cto.com/oss/201710/26/2940e3ab1f5db6c0e7d826953b571bf2.png" target="_blank"></a>

  Iterator:迭代器,可以用来对集合里的元素进行遍历,这是一个接口,需要使用iterator方法来获得对象,迭代器的对象可以调用hashNext方法,这个方法会使用hash值找到集合里每一个下标,每找到一个就返回一个boolean类型,找到就返回true,没有就返回false。然后再使用next方法将下标里的值打印出来就实现了集合遍历:

<a href="https://s4.51cto.com/oss/201710/26/caaacc6cb14c93a7163e977b3de98eda.png" target="_blank"></a>

运行结果:

<a href="https://s5.51cto.com/oss/201710/26/c3c3afc00686f332d50c9455b69b6aec.png" target="_blank"></a>

使用HashSet的删除方法删除某个对象的时候,如果这个对象的类里没有重写equals和hashcode方法的话是无法删除的。因为HashSet集合使用hash值来定位下标的,把下标定位好后才能使用equals来比较对象里的内容是否相等。然后才能准确的进行删除,不重写这两个方法,默认调用的是Object的,所以两个内容相同的对象得到的hash值是不一样的,自然也就无法进行删除:

如果不重写方法:

<a href="https://s5.51cto.com/oss/201710/26/0e7a28904fcccd3011a93773911e6a18.png" target="_blank"></a>

<a href="https://s3.51cto.com/oss/201710/26/585a270f7769334ab3f43a7cf862a6ef.png" target="_blank"></a>

可以从运行结果看出无法进行删除,即便调用删除方法后这个值仍然存在。

重写方法:

<a href="https://s1.51cto.com/oss/201710/26/e5443376d526f93bf13224af3d8df69c.png" target="_blank"></a>

<a href="https://s2.51cto.com/oss/201710/26/a24c6713c83d61b704e2aadf39470f44.png" target="_blank"></a>

<a href="https://s5.51cto.com/oss/201710/26/d7cd3ff080022ea1e761282e8e612fc9.png" target="_blank"></a>

可以从运行结果看出重写了方法后值就被成功的删除掉了

Tree集合:

Tree集合是二叉树结构的集合,会把相近的值放在一起,所以这种结构也起到了一定的排序作用,例如操作系统的文件就是tree这种排序结构。

Tree结构图:

<a href="https://s3.51cto.com/oss/201710/26/97073baf65ec0432930a5bd7b1c0dbbb.png" target="_blank"></a>

代码示例:

<a href="https://s1.51cto.com/oss/201710/26/345027ffa0083948b3142b571f3ceff8.png" target="_blank"></a>

<a href="https://s3.51cto.com/oss/201710/26/5f1e4f4c96ee96f915952debfc2373bb.png" target="_blank"></a>

从运行结果可以看出是有一定排序的

ArrayList集合与Vector集合:

ArrayList集合是不带线程安全的数组集合,Vector集合则是带有线程安全的数组集合,两者区别就在于此,其他方法什么的都是一样的。

add:添加方法,可以直接添加,也可以选择从某个下标的位置开始添加:

<a href="https://s5.51cto.com/oss/201710/26/e8488976ece3426a4c8540149c427003.png" target="_blank"></a>

ArrayList集合在new对象的时候可以向构造器传递一个int值来事先确定数组的长度,这样就能省去扩容的时间(前提是确定自己需要用多少长度):

<a href="https://s5.51cto.com/oss/201710/26/5c96e2a65da9f75e985539742256fb0a.png" target="_blank"></a>

addAll:批量添加方法,可以将一个集合里的数据批量添加到另一个集合中,同样的也可以选择某个下标开始添加:

<a href="https://s4.51cto.com/oss/201710/26/e42979d4d422a01582f1f39cd54f494b.png" target="_blank"></a>

get:按下标拿出一个值方法:

<a href="https://s1.51cto.com/oss/201710/26/d9483840bbdb97b677585b605bd553f7.png" target="_blank"></a>

remove:按下标删除方法:

<a href="https://s5.51cto.com/oss/201710/26/1658d4e74e57f696f8bca5df68273b33.png" target="_blank"></a>

removeAll:批量删除方法,可以将一个集合里的数据批量删除:

<a href="https://s2.51cto.com/oss/201710/26/0a52589876dfd45feef0042534dc48b6.png" target="_blank"></a>

indexOf:从前面开始查找这个对象在数组里的下标,查找到了返回这个对象的下标,没查找到则返回-1,和字符串的indexOf是一样的:

<a href="https://s3.51cto.com/oss/201710/26/ab415610e0dda76cabe62ee4ab55a07e.png" target="_blank"></a>

  lastIndexOf:从后面开始查找这个对象在数组里的下标,同样的查找到了返回这个对象的下标,没查找到则返回-1:

<a href="https://s4.51cto.com/oss/201710/26/b67110dbb9f1b142be0138b9133d2db4.png" target="_blank"></a>

set:可以使用这个方法覆盖某一个下标的值:

<a href="https://s4.51cto.com/oss/201710/26/64122f44cf72878575876d8bacf0604f.png" target="_blank"></a>

利用迭代器在ArrayList集合里正序遍历和倒序遍历:

<a href="https://s1.51cto.com/oss/201710/26/e77d6ba31902d7449c01428ed24472b2.png" target="_blank"></a>

<a href="https://s1.51cto.com/oss/201710/26/d4fe5ae04e4b72543d705ae95b49b579.png" target="_blank"></a>

使用ArrayList的删除方法删除集合里某个对象的时候,如果这个对象的类里没有重写equals方法的话是无法删除的。因为不重写这个方法,默认调用的是Object的,所以两个内容相同的对象得到的返回值是false,需要自己重写equals来比较对象里的内容是否相等。然后才能准确的进行删除,不重写的话自然也就无法进行删除:

<a href="https://s1.51cto.com/oss/201710/26/52135bc5a33602ef04a7a6cf81009b86.png" target="_blank"></a>

<a href="https://s5.51cto.com/oss/201710/26/395ad72882fa22d3f2d3c836f8f80239.png" target="_blank"></a>

LikedList集合:

双链表集合,双链结构能够记录上家和下家,而且有链头和链尾,就像一条车链一般,其特性是方便灵活。

add方法:添加方法,默认是从后面开始添加:

<a href="https://s5.51cto.com/oss/201710/26/3da8b36d64193d99e7b1eb35c01ea15e.png" target="_blank"></a>

addFirst方法:从最前面添加方法,如果添加一个在最前面,则这个添加的就成为了链头:

<a href="https://s1.51cto.com/oss/201710/26/41cda5bd6dd328c8d047a9524bb3edf4.png" target="_blank"></a>

  addLast方法:从最后面添加方法,其实就是add方法,因为add默认就是从最后面开始添加的:

<a href="https://s5.51cto.com/oss/201710/26/1010851bfedbf73a49b0543da7c17c25.png" target="_blank"></a>

使用迭代器遍历LikedList集合:

<a href="https://s1.51cto.com/oss/201710/26/5d8102c95bee11dfcc3135146557d513.png" target="_blank"></a>

<a href="https://s1.51cto.com/oss/201710/26/0d4def4c17926300866d427c7cb244c6.png" target="_blank"></a>

LikedList集合还有队列的特性,就是像排队一样,一个个的进,一个个的出。

<b>本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976536,如需转载请自行联系原作者</b>

继续阅读