集合学习笔记(一)
来源:互联网 发布:西部数码域名查询 编辑:程序博客网 时间:2024/05/22 06:46
Java的集合类主要由两个接口派生而出,Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Collection
Collection接口是List,set和Queue接口的父接口,该接口里定义的方法既可以用于操作Set集合,也可以用于操作List和Queue集合。Collection接口里定义了如下操作集合元素的方法,
boolean add(Object o)
boolean addAll(Collection c)
void clear()
boolean contains(Object o)
bloolean containsAll(Collection c)
blooean isEmpty()
Iterator iterator()
blooean remove(Object o)
blooean removeAll(Collection c)
blooean retainAll(Collection c)
int size()
Object[] toArray()
集合类就像容器,现实生活中的容器,无非就是添加对象,清空对象,判断容器是否为空等。
package com.lqf.collection;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;public class CollectionTest {Collection collection=new ArrayList();//添加元素collection.add("student1");//虽然集合里不能放基本类型的值,但Java支持自动装箱collection.add(1);System.out.println("collection集合的元素个数为:"+collection.size());//删除元素collection.remove(1);System.out.println("collection集合的元素个数为:"+collection.size());//判断是否包含指定字符串System.out.println("collection集合是否包含student1"+collection.contains("student1"));collection.add("集合学习");System.out.println("collection集合的元素:"+collection);Collection books=new HashSet();books.add("java编程思想");books.add("java核心技术");books.add("EffectiveJava");System.out.println("collection是否包含books集合"+collection.containAll(books));//用collection集合减去books集合里的元素collection.removeAll(books);System.out.println("collection集合的元素"+collection);//删除collection集合里的所有元素c.clear();System.out.println("collection集合的元素:"+collection);//控制books集合里只剩下collection也包含的元素books.retainAll(collection);System.out.println("books集合的元素:"+books);}
Set集合
set集合不能包含相同的元素。set集合与Collection基本相同,没有提供任何额外的方法。实际上Set就是Collection,只是行为略有不同(Set不能包含重复元素)。
HashSet类
HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
HashSet具有以下特点
1 不能保证元素的排列顺序
2 HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者有两个以上的线程同时修改了HashSet集合时,则必须通过代码来保证其同步
3 集合元素值可以是null
//类A的equals()方法总是返回true,但没有重写其hashCode()方法 class A { public boolean equals(Object object) { return true; } } // class B{ public int hashCode(){ return 1; } } // class C{ public int hashCode(){ return 2; } public boolean equals(Object object){ return true; } } public class HashSetTest{ public static void main(String[] args){ HashSet books=new HashSet(); books.add(new A()); books.add(new A()); books.add(new B()); books.add(new B()); books.add(new C()); books.add(new C()); System.out.println(books); } }
LinkedHashSet类
HashSet还有一个子类LinkedHashSet,LinkedHashSet集合也是根据元素的hashcode值来决定元素的存储位置,但它同时链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。也就是说,当遍历LinkHashSet集合里的元素时,LinkEdHashSet将会按元素的添加顺序来访问集合里的元素。
LinkHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问set里的全部元素时将有较好的性能,因为它以链表来维护内部顺序。
package com.lqf.collection;import java.util.LinkedHashSet;public class LinkedHashSetTest {public static void main(String[] args) {LinkedHashSet books=new LinkedHashSet();books.add("java编程思想");books.add("java核心技术");books.add("EffectiveJava");System.out.println(books);//删除 “Effective Java”books.remove("EffectiveJave");//重新添加“EffectiveJava"books.add("EffectiveJava");System.out.println(books);}}
输出LInkedHashSet集合的元素时,元素的顺序总与添加顺序一致。
LinkHashSet依然是HashSet,因此它依然不容许集合元素重复。
TreeSet类
TreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保元素处于排序状态。与HashSet集合相比,TreeSet还提供了几个额外方法。
Comparator comparator()
Object first()
Object last()
Object lower()
Object higher()
SortedSet subSet(Object fromElement,Object toElement)
SortedSet headSet(Object toElement)
SortedSet tailSet(Object fromElement)
增加了访问第一个,前一个,后一个,最后一个元素的方法,并提供了三个从TreeSet中截取子TreeSet的方法。
package com.lqf.collection;import java.util.TreeSet;public class TreeSetTest {public static void main(String[] args) {TreeSet nums=new TreeSet();//向TreeSet中添加四个Integer对象nums.add(1);nums.add(2);nums.add(4);nums.add(3);nums.add(5);//输出集合元素,看到集合元素已经处于排序状态System.out.println(nums);//输出集合里的第一个元素System.out.println(nums.first());//输出集合里的最后一个元素System.out.println(nums.last());//返回小于4的子集不包含4System.out.println(nums.headSet(4));//返回大于5的子集,如果Set中包含5,子集中还包括5System.out.println(nums.tailSet(5));//返回大于等于-3,小于4的子集System.out.println(nums.subSet(2, 4));}}
TreeSet并不是根据元素的插入顺序进行排序的,而是根据元素实际值的大小来进行排序的。TreeSet采用红黑树的数据结构来存储集合元素。TreeSet支持两种排序方法:自然排序和定制排序,在默认情况下,treeSet采用自然排序
- 集合学习笔记(一)
- 【Java学习笔记】集合框架(一)
- hash集合源码学习笔记(一)
- 学习笔记(八)对象的集合(一)
- 黑马程序员——集合学习笔记(一)
- underscore学习笔记—集合函数/collections(一)
- [学习笔记] Java核心技术 卷一:基础知识 集合(六)
- ORACLE PL/SQL 集合学习笔记(一)
- 集合框架map学习笔记一HashMap
- 集合框架map学习笔记一LinkedHashMap
- 集合框架map学习笔记一IdentityHashMap
- 黑马程序员 集合学习笔记一
- Java学习笔记---集合(一)Set
- Java学习笔记之集合(一):Collection集合的方法
- Java学习笔记(集合)
- 集合学习笔记(二)
- 集合学习笔记(三)
- Set集合HashSet学习(Set集合学习一)
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析
- C#入门11.4——预定义异常类(1)
- UML的初相识
- MIT 6.00 1x Lecture 4 - Functions 学习笔记
- smem – Linux 内存监视软件
- 集合学习笔记(一)
- 7.Java基础:常见IO流----->字符流:FileReader、FileWriter
- 【OpenCV入门教程之四】 ROI区域图像叠加&初级图像混合 全剖析
- 界面代码使用总结
- Hibernate Entity / Persistence LifeCycle States
- SpringMVC源码剖析(七)- HandlerExceptionResolver异常解析器家族揭秘
- Android懒人开发mark
- 【OpenCV入门教程之五】 分离颜色通道&多通道图像混合
- 【Servlet】Cookie详解