集合是java基础中比较重要的知识点。掌握好集合的知识对以后的程序开发很有用。由于本人知识有限,对于没有集合概念的人来说,可以从“1136”学起,也就是一张图,一个类(Collections),三个知识点和六个接口。java集合可以归纳为两类,这是根据集合框架的基础接口而言的。一类是以Collection接口的集合框架,一类是以Map接口的集合框架,根据我的理解,Collection是Map的基础,这句话会在后面解释。为了更加直观的表现集合框架,特意花了一张图。如下:
一个图
从图中可以更加清晰的了解java集合的结构。
一个类
Collections类提供了一系列的与集合相关的操作,包括:1,对List集合进行排序,逆序,“洗牌”,截取等等。2,查找和替换操作。3.对于集合中的有些线程不安全的类提供同步控制。
三个知识点----增强for循环,泛型,自动拆装箱。
增强for循环
在java1.5以后,针对集合和数组(数组也可以叫做集合)提出了增强for循环。用法如下:
package myday02; import java.util.HashSet; import java.util.Set; public class Test1 { /* * 增强for循环只是提供了一个遍历集合的方法, * 此方法有一个缺点:就是只能看,不能更改。 */ public static void main(String[] args) { //定义一个带泛型的Set Set<String> set =new HashSet(); set.add("zhangsan"); set.add("lisi"); set.add("wangwu"); //增强循环举例。 for(String s:set) { System.out.println(s); } } }泛型
自动拆装箱
在java5之前,如果往集合里面装入数据,必须将数据封装成对象。数组1要封装成Integer.....。从java5以后,这种情况就没有了,所有的基本数据库类型要往集合里面装的时候,虚拟机会自动的将基本数据类型封装成包装类型。
例子代码如下:
package myday02; import java.util.LinkedList; import java.util.List; public class Test { public static void main(String[] args) { List list =new LinkedList(); //在java5以前 list.add(new Integer(1)); //在java5以后 list.add(1);//在java5以前,这种写法错误 } }六个接口
Collection接口
已经在上面提到,可以查看API;
Set接口
Set接口是Collection的子接口,但是他没有提供比Collection接口更多的方法,它的特性就是---“无序,不重复”。即所有想放入Set集合的对象使用equals方法返回值应该是false(在这里简要提一下Object类的equals方法http://blog.csdn.net/yuan514168845/article/details/17513437)。
List接口
List接口与Set接口最大的不同就是“有序,可重复”。即放入List集合的对象可以重复,并且会记住对象进入的次序。
Iterator接口
Iterator接口提供了对所有的集合的标准的遍历方式,Collection接口提供的方法iterator,会返回一个Iterator的是实现类的对象。但是每种集合框架实现此类的方式不一样,但是对外提供的方法一样,所以称为“标准的”;代码示例:
package myday02; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Test1 { /* * 增强for循环只是提供了一个遍历集合的方法, * 此方法有一个缺点:就是只能看,不能更改。 */ public static void main(String[] args) { //定义一个带泛型的Set Set<String> set =new HashSet(); set.add("zhangsan"); set.add("lisi"); set.add("wangwu"); //增强循环举例。 /*for(String s:set) { System.out.println(s); }*/ //迭代器的固定代码 Iterator it =set.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
Map接口
Map接口及实现类存储的是“key--value”这样的称为“键值对”的元素。Map的底层实现是用一个Set集合加一个List集合组成。即:key不允许重复,value可以重复。这也是为什么前面说Collection是Map的基础。
Comparable接口
comparable接口提供了一种定制化的排序方案(这句话是我想出来的,可能不准确)。继承此接口的子类必须实现它的唯一方法。示例代码如下:
package myday01; /* * 来自网上的一道题目:定义一个学生类,有姓名,成绩,年龄。 * 要求:按照他们的成绩高低将他们输出 * */ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; public class Test5 { public static void main(String[] args) { List set =new LinkedList(); set.add(new Student("zhangsan",20,55)); set.add(new Student("lisi",20,90)); set.add(new Student("wangwu",20,30)); set.add(new Student("zhaoliu",20,99)); set.add(new Student("gouzi",20,70)); set.add(new Student("wangerxiao",20,80)); Collections.sort(set); System.out.println(set); } } //Comparable接口的使用 class Student implements Comparable { private String name; private int age; private double score; public Student(String name,int age,double score) { this.name=name; this.age=age; this.score=score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; }
至此,“1136”说完,但是,想要彻底掌知识点,还需要深入。总结了集合的难点--------难的不是知识点,难的是对选用哪个集合框架比较合适。