道招

Java基础第十五讲:集合(一)

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

Java基础第十五讲:集合(一)

本讲内容:集合 collection 讲集合collection之前,我们先分清三个概念:
  1. collection 集合,用来表示任何一种数据结构
  2. Collection 集合接口,指的是 java.util.Collection接口,是 Set、List 和 Queue 接口的超类接口
  3. Collections 集合工具类,指的是 java.util.Collections 类。
  SCJP考试要求了解的接口有:Collection , Set , SortedSet , List , Map , SortedMap , Queue , NavigableSet , NavigableMap, 还有一个 Iterator 接口也是必须了解的。 SCJP考试要求了解的类有: HashMap , Hashtable ,TreeMap , LinkedHashMap , HashSet , LinkedHashSet ,TreeSet , ArrayList , Vector , LinkedList , PriorityQueuee , Collections , Arrays 下面给出一个集合之间的关系图: collection 上图中加粗线的ArrayList 和 HashMap 是我们重点讲解的对象。下面这张图看起来层级结构更清晰些。 collection 我们这里说的集合指的是小写的collection,集合有4种基本形式,其中前三种的父接口是Collection。
  1. List 关注事物的索引列表
  2. Set 关注事物的唯一性
  3. Queue 关注事物被处理时的顺序
  4. Map 关注事物的映射和键值的唯一性
  一、Collection 接口 Collection接口是 Set 、List 和 Queue 接口的父接口,提供了多数集合常用的方法声明,包括 add()、remove()、contains() 、size() 、iterator() 等。
add(E e) 将指定对象添加到集合中
remove(Object o) 将指定的对象从集合中移除,移除成功返回true,不成功返回false
contains(Object o) 查看该集合中是否包含指定的对象,包含返回true,不包含返回flase
size() 返回集合中存放的对象的个数。返回值为int
clear() 移除该集合中的所有对象,清空该集合。
iterator() 返回一个包含所有对象的iterator对象,用来循环遍历
toArray() 返回一个包含所有对象的数组,类型是Object
toArray(T[] t) 返回一个包含所有对象的指定类型的数组
    我们在这里只举一个把集合转成数组的例子,因为Collection本身是个接口所以,我们用它的实现类ArrayList做这个例子:
01 import java.util.ArrayList;
02 import java.util.Collection;
03
04 public class CollectionTest {
05
06     public static void main(String[] args) {
07
08         String a = "a",b="b",c="c";
09         Collection list = new ArrayList();
10         list.add(a);
11         list.add(b);
12         list.add(c);
13
14         String[] array =  list.toArray(new String[1]);
15
16         for(String s : array){
17             System.out.println(s);
18         }
19     }
20 }
编译并运行程序,检查结果: image 二、几个比较重要的接口和类简介 1、List接口 List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。 ArrayList 可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。 LinkedList 中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。 Vector 是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用 2、Set接口 Set关心唯一性,它不允许重复。 HashSet 当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。 LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。 TreeSet 当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。) 3、Queue接口 Queue用于保存将要执行的任务列表。 LinkedList 同样实现了Queue接口,可以实现先进先出的队列。 PriorityQueue 用来创建自然排序的优先级队列。番外篇中有个例子,你可以看一下。 4、Map接口 Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。 HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。 Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。 LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。 TreeMap 当需要键值对,并关心元素的自然排序时可采用它。 三、ArrayList的使用 ArrayList是一个可变长的数组实现,读取效率很高,是最常用的集合类型。 1、ArrayList的创建 在Java5版本之前我们使用:
1 List list = new ArrayList();
在Java5版本之后,我们使用带泛型的写法:
1 List<String> list = new ArrayList<String>();
上面的代码定义了一个只允许保存字符串的列表,尖括号括住的类型就是参数类型,也成泛型。带泛型的写法给了我们一个类型安全的集合。关于泛型的知识可以参见这里。 2、ArrayList的使用:
01 List<String> list = new ArrayList<String>();
02 list.add("nihao!");
03 list.add("hi!");
04 list.add("konikiwa!");
05 list.add("hola");
06 list.add("Bonjour");
07 System.out.println(list.size());
08 System.out.println(list.contains(21));
09 System.out.println(list.remove("hi!"));
10 System.out.println(list.size());
关于List接口中的方法和ArrayList中的方法,大家可以看看JDK中的帮助。 3、基本数据类型的的自动装箱: 我们知道集合中存放的是对象,而不能是基本数据类型,在Java5之后可以使用自动装箱功能,更方便的导入基本数据类型。
1 List<Integer> list = new ArrayList<Integer>();
2 list.add(new Integer(42));
3 list.add(43);
4、ArrayList的排序: ArrayList本身不具备排序能力,但是我们可以使用Collections类的sort方法使其排序。我们看一个例子:
01 import java.util.ArrayList;
02 import java.util.Collections;
03 import java.util.List;
04
05 public class Test {
06
07     public static void main(String[] args) {
08         List<String> list = new ArrayList<String>();
09         list.add("nihao!");
10         list.add("hi!");
11         list.add("konikiwa!");
12         list.add("hola");
13         list.add("Bonjour");
14
15         System.out.println("排序前:"+ list);
16
17         Collections.sort(list);
18
19         System.out.println("排序后:"+ list);
20     }
21
22 }
编译并运行程序查看结果: 排序前:[nihao!, hi!, konikiwa!, hola, Bonjour] 排序后:[Bonjour, hi!, hola, konikiwa!, nihao!] 5、数组和List之间的转换 从数组转换成list,可以使用Arrays类的asList()方法:
01 import java.util.ArrayList;
02 import java.util.Collections;
03 import java.util.List;
04
05 public class Test {
06
07     public static void main(String[] args) {
08
09             String[] sa = {"one","two","three","four"};
10             List list = Arrays.asList(sa);
11             System.out.println("list:"+list);
12             System.out.println("list.size()="+list.size());
13     }
14
15 }
6、Iterator和for-each 在for-each出现之前,我们想遍历ArrayList中的每个元素我们会使用Iterator接口:
01 import java.util.Arrays;
02 import java.util.Iterator;
03 import java.util.List;
04
05 public class Test {
06
07     public static void main(String[] args) {
08
09         // Arrays类为我们提供了一种list的便捷创建方式
10         List<String> list = Arrays.asList("one", "two", "three", "four");
11
12         // 转换成Iterator实例
13         Iterator<String> it = list.iterator();
14
15         //遍历
16         while (it.hasNext()) {
17             System.out.println(it.next());
18         }
19
20     }
21
22 }
在for-each出现之后,遍历变得简单一些:
01 import java.util.Arrays;
02 import java.util.Iterator;
03 import java.util.List;
04
05 public class Test {
06
07     public static void main(String[] args) {
08
09         // Arrays类为我们提供了一种list的便捷创建方式
10         List<String> list = Arrays.asList("one", "two", "three", "four");
11
12         for (String s : list) {
13             System.out.println(s);
14         }
15
16     }
17
18 }
好了,本讲就到这里,下次我们讲HashMap。 分享至上:分享源头
更新时间:
上一篇:Java基础第十四讲:字符串下一篇:Java基础第十六讲:集合(二)

相关文章

Java基础第十六讲:集合(二)

本讲内容:Map HashMap 前面课程中我们知道Map是个接口,它关心的是映射关系,它里面的元素是成对出现的,键和值都是对象且键必须保持唯一。这一点上看它和Collection是很不相同的。 阅读更多…

关注道招网公众帐号
友情链接
消息推送
道招网关注互联网,分享IT资讯,前沿科技、编程技术,是否允许文章更新后推送通知消息。
允许
不用了