Java中的集合功能整理
2016-05-01 22:02
323 查看
网上对集合的功能介绍有很多,也很详细。我在这里只能是对常用的几个集合类进行功能的简单梳理。小白一个。这里主要参考孙宇霞、王健编著的《Java编程从基础到应用》。内容仅供学习交流。
1.选择合适的集合类。
Set:是一个接口,无序集合,不能包含重复元素。同时身为接口不能生成对象。但是类HashSet和TreeSet实现了该接口,所以通常使用的也是这两个。
HashSet:该集合中主要存放的一些无序元素。如果你只是想用一个‘罐子’盛东西,其他什么都不关心,可以选它。
TreeSet:该集合除了实现Set接口还实现了SortedSet接口。也就是说可以用它来进行一些排序默认升序。当然排序的元素必须具有可比性。也就是说对于基本类型如:Float, Integer,String,Character等
List:接口,允许出现重复元素。与Set另一个不同的地方就是元素有序。如果你对加进‘罐子’里东西很在乎先后。如谁先进去的谁后进去的,第几个是谁比较关心可以选用。但是同样。List是个接口我们通常使用的是两个实现了该接口的两个类arrayLis和LinkedList。
ArrayList:支持对元素的快速访问。但是对插入和删除支持性差。
LinkedList: 对元素的插入和删除性能良好。由于List中元素有序,可以我们不用Iterator对象也可以访问,不过要先调用toArray()方法。才能像操作一个普通数组一样访问。
2.常用类的关系图。这是一个简单图。PS:我保证你能搜到更复杂的。
这里Collection.Set. List都是接口,知道这层实现关系,这三个接口中的方法,就可以被实现接口的类对象所调用。
3.
Collection中的方法:
boolean add()添加一个元素;boolean addAll( Collection c)添加集合c中所有元素。void clear():清空集合;boolean contain(object o):是否包含元素o。
int size():返回集合中元素个数;boolean isEmpty():是否为空; Object[] toArray():转变成包含此集合中所有元素的数组;boolean remove(object o):去除元素o; boolean removeAll(collection c)去除集合中c中所有元素;boolean retainAll(Collection c):仅保留c中所有元素 ;Iterator<E> iterator():返回一个Iterator对象,用于遍历集合元素。
HashSet:常用方法基本来源于Collection类,见上:
SortedSet<E> subSet(E,F):返回一个新集合,从E到F,但不包含F。
SortedSet<E> headSet(E):返回一个包含E之前的元素,不包含E;SortedSet<E > tailSet(F)返回F之后元素,包含F。
ArrayList:get(i):获取第i个元素。int indexOf(object o):返回第一次出现指定元素的下标,没有则是-1;lastIndexOf(object o):返回最后一次出现指定元素索引,没有则返回-1;
set(index, E,)修改指定索引处元素,并返回之前的元素。 List<E> subList(E,F)返回指定下标之间的元素,不包含后者。
写到这里大家应该有了一些浅显的认识。值得指出的是集合中存放的都是对象的引用值。这就是为什么前面的例子中会出现Integer.valueof():其实就是把基本数据类型转变成它的引用。不过现在JDK已经可以自动进行拆装箱功能,所以即使不写也没错。以上内容多为自己阅读后随写,不当之处敬请留言。相互学习,共同提高。
1.选择合适的集合类。
Set:是一个接口,无序集合,不能包含重复元素。同时身为接口不能生成对象。但是类HashSet和TreeSet实现了该接口,所以通常使用的也是这两个。
HashSet:该集合中主要存放的一些无序元素。如果你只是想用一个‘罐子’盛东西,其他什么都不关心,可以选它。
TreeSet:该集合除了实现Set接口还实现了SortedSet接口。也就是说可以用它来进行一些排序默认升序。当然排序的元素必须具有可比性。也就是说对于基本类型如:Float, Integer,String,Character等
List:接口,允许出现重复元素。与Set另一个不同的地方就是元素有序。如果你对加进‘罐子’里东西很在乎先后。如谁先进去的谁后进去的,第几个是谁比较关心可以选用。但是同样。List是个接口我们通常使用的是两个实现了该接口的两个类arrayLis和LinkedList。
ArrayList:支持对元素的快速访问。但是对插入和删除支持性差。
LinkedList: 对元素的插入和删除性能良好。由于List中元素有序,可以我们不用Iterator对象也可以访问,不过要先调用toArray()方法。才能像操作一个普通数组一样访问。
2.常用类的关系图。这是一个简单图。PS:我保证你能搜到更复杂的。
这里Collection.Set. List都是接口,知道这层实现关系,这三个接口中的方法,就可以被实现接口的类对象所调用。
3.
Collection中的方法:
boolean add()添加一个元素;boolean addAll( Collection c)添加集合c中所有元素。void clear():清空集合;boolean contain(object o):是否包含元素o。
int size():返回集合中元素个数;boolean isEmpty():是否为空; Object[] toArray():转变成包含此集合中所有元素的数组;boolean remove(object o):去除元素o; boolean removeAll(collection c)去除集合中c中所有元素;boolean retainAll(Collection c):仅保留c中所有元素 ;Iterator<E> iterator():返回一个Iterator对象,用于遍历集合元素。
HashSet:常用方法基本来源于Collection类,见上:
Set<Integer> iset=new HashSet<Integer>(); iset.add(Integer.valueOf(3));//这里用了一个封装类,也可以直接用一个基本数据类型TreeSet:first():返回集合中第一个元素;last():返回集合中最后一个元素。poolFirst()返回集合中第一个元素然后移除。poolLast():返回最后一个元素然后移除。
SortedSet<E> subSet(E,F):返回一个新集合,从E到F,但不包含F。
SortedSet<E> headSet(E):返回一个包含E之前的元素,不包含E;SortedSet<E > tailSet(F)返回F之后元素,包含F。
public static void main(String[] args){ SortedSet<Integer> iset=new TreeSet<Integer>(); Scanner sc=new Scanner(System.in); System.out.println("请输入整型:"); for(int i=0;i<4;i++){ System.out.println("请输入第"+(i+1)+"个数字"); int value=sc.nextInt(); iset.add(value); } Iterator<Integer> it=iset.iterator(); while(it.hasNext()){ System.out.println(it.next()); } SortedSet<Integer> head_set=iset.headSet(60); for(int j=0;j<head_set.size();j++){ System.out.println(head_set.toArray()[j]); } }
ArrayList:get(i):获取第i个元素。int indexOf(object o):返回第一次出现指定元素的下标,没有则是-1;lastIndexOf(object o):返回最后一次出现指定元素索引,没有则返回-1;
set(index, E,)修改指定索引处元素,并返回之前的元素。 List<E> subList(E,F)返回指定下标之间的元素,不包含后者。
public static void main(String[] args){ List<Integer> iset=new ArrayList<Integer>(); Scanner sc=new Scanner(System.in); System.out.println("请输入整型:"); for(int i=0;i<4;i++){ System.out.println("请输入第"+(i+1)+"个数字"); int value=sc.nextInt(); iset.add(value); } Iterator<Integer> it=iset.iterator(); while(it.hasNext()){ System.out.println(it.next()); } List<Integer> head_List=iset.subList(0, 2); for(int j=0;j<head_List.size();j++){ System.out.println(head_List.get(j));//这里也可以转变成数组即调用方法toArray()[j]输出 } }LinekedList: addFirst(O)插入到集合开头;addLast(O):插入到集合尾部。removeFirst():移除第一个元素;removeLast():移除最后一个元素; getFirst():返回第一个元素;getLast():返回最后一个元素。
public static void main(String[] args){ LinkedList<Integer> iset=new LinkedList<Integer>(); Scanner sc=new Scanner(System.in); System.out.println("请输入整型:"); for(int i=0;i<2;i++){ System.out.println("请输入第"+(i+1)+"个数字"); int value=sc.nextInt(); iset.add(value); } iset.addFirst(5); for(int j=0;j<iset.size();j++){ System.out.println(iset.get(j));//虽然linkedList有序,但是要想像普通数组一样操作它。你还得调用toArray()方法。 } }
写到这里大家应该有了一些浅显的认识。值得指出的是集合中存放的都是对象的引用值。这就是为什么前面的例子中会出现Integer.valueof():其实就是把基本数据类型转变成它的引用。不过现在JDK已经可以自动进行拆装箱功能,所以即使不写也没错。以上内容多为自己阅读后随写,不当之处敬请留言。相互学习,共同提高。
相关文章推荐
- JAVA SkipList 跳表 的原理和使用例子
- 码农小汪-SpringMVC-入门篇
- 讲义五 java语言基础
- java正则表达式
- LeetCode------Roman to Integer
- java_Java工具包(Arrays,Date,SimpleDateFormat,NumberFormat,DecimalFormat,Calendar,Math)
- springmvc框架简介,第一个demo
- java,jdbc连接mysql
- java静态分配和动态分配
- java第四次实验
- java_包
- java热部署及类加载
- 20145214 《Java程序设计》第9周学习总结
- JAVA语言之计数排序
- JAVA中的集合的概念
- Java jvm 内存回收机制
- Spring学习-helloworld
- [java]struts2 模型驱动
- 20145240 《Java程序设计》第九周学习总结
- 20145227 《Java程序设计》第9周学习总结