黑马程序员---从头开始,回忆JAVA基础之集合(一)
来源:互联网 发布:linux下安装php环境 编辑:程序博客网 时间:2024/06/10 07:22
总结了Collection中的分类,和Collection中的常用方法。和迭代器的实际运用。
希望对初学者有帮助!
----------------------------------华丽的分割线----------------------------
1.1. Collection
java提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。这种数据结构成为集合:Collection。
Collection是一个接口,其定义了集合的相关功能方法。
1.1.1. List和Set
Collection派生出了两个子接口,一个是List另一个则是Set。
List:称为可重复集,顾名思义,该集合中是允许存放重复元素的,那么何为重复元素?重复元素指的并非是同一个元素,而是指equals方法比较为true的元素。
Set:称为不可重复集,所以,该集合中是不能将相同的元素存入集合两次,同List,这里相同指的也是两个元素的equals比较结果为true。
1.1.2. 集合持有对象的引用
集合中存储的都是引用类型的元素,那么引用类型变量实际上存储的是对象的“地址”,所以实际上集合只存储了元素对象在堆中的地址。而并不是将对象本身存入了集合中。
1.1.3. add()方法
Collection定义了一个add方法用于向集合中添加新元素。该方法定义为:
boolean add(E e)
该方法会将给定的元素添加进集合,若添加成功则返回true,否则返回false
例如:
Collection<String> c = new ArrayList<String>();System.out.println(c); // []c.add("a");c.add("b");c.add("c");System.out.println(c); // [a, b, c]
这里Collection后面的<String>是泛型,我们后面会讲解,这里不写也没有关系。
1.1.4. contains方法
boolean contains(Object o)
该方法会用于判断给定的元素是否被包含在集合中。若包含则返回true,否则返回false。
这里需要注意的是,集合在判断元素是否被包含在集合中是使用元素的equals的比较结果。
(o==null ? e==null : o.equals(e)) 其中e是集合中的元素。
例如:
1.Collection<Cell> cells = new ArrayList<Cell>(); 2.cells.add(new Cell(1, 2));3.cells.add(new Cell(1, 3));4.cells.add(new Cell(2, 2));5.cells.add(new Cell(2, 3)); 6.Cell cell = new Cell(1, 3); 7.// List集合contains方法和对象的equals方法相关8.boolean flag = cells.contains(cell);9.// 如果Cell不重写equals方法将为false10.System.out.println(flag); // true
1.1.5. size,clear,isEmpty方法
size方法用于获取当前集合中的元素总数。该方法定义为:int size()
clear方法用于清空集合。该方法定义为:void clear()
isEmpty方法用于判断当前集合中是否不 包含元素。该方法定义为:boolean isEmpty()
例如:
1.Collection<String> c = new HashSet<String>();2.System.out.println(c.isEmpty()); // true 3.c.add("java"); 4.c.add("cpp"); 5.c.add("php");6.c.add("c#"); 7.c.add("objective-c"); 8.9.// isEmpty:false, size: 510.System.out.println("isEmpty:" + c.isEmpty() + ",size: " + c.size()); 11.c.clear();12.13.// isEmpty:true, size: 014.System.out.println("isEmpty:" + c.isEmpty() + ", size: " + c.size());
1.1.6. addAll与containsAll方法
集合也提供了批处理操作:
addAll方法用于将给定集合中的所有元素添加到当前集合中,其方法定义为:
boolean addAll(Collection c)
例如:
1.Collection<String> c1 = new ArrayList<String>();2.c1.add("java");3.c1.add("cpp"); 4.c1.add("php");5.c1.add("c#"); 6.c1.add("objective-c"); 7.System.out.println(c1); // [java, cpp, php, c#, objective-c] 8.Collection<String> c2 = new HashSet<String>(); 9.c2.addAll(c1);10.System.out.println(c2); // [cpp, php, c#, java, objective-c]
containsAll方法用于判断当前集合是否包含给定集合中的所有元素,若包含则返回true。其方法定义为:
boolean containsAll(Collection c)
例如:
1.Collection<String> c1 = new ArrayList<String>();2.c1.add("java"); 3.c1.add("cpp"); 4.c1.add("php");5.c1.add("c#"); 6.c1.add("objective-c"); 7.System.out.println(c1); // [java, cpp, php, c#, objective-c] 8.Collection<String> c2 = new ArrayList<String>();9.c2.add("java"); 10.c3.add("cpp");11.System.out.println(c1.containsAll(c2)); // true
1.2. Iterator 迭代器
Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。
获取迭代器的方式是使用Collection定义的方法:
Iterator iterator()
迭代器Iterator是一个接口,集合在覆盖Collection的iterator()方法时提供了迭代器的实现。
Iterator提供了统一的遍历集合元素的方式。
1.2.1. hasNext与next方法
迭代器用于遍历集合的两个主要方法:
· boolean hasNext():判断集合是否还有元素可以遍历。
· E next():返回迭代的下一个元素
遍历集合应遵循“先问后取”的方式,也就是说,应当在确定hasNext()方法的返回值为true的情况下再通过next()方法取元素。
由此可以看出,使用迭代器遍历集合是通过boolean值驱动的,所以它更适合使用while循环来遍历。
例如:
1.Collection<String> c = new HashSet<String>();2.c.add("java"); 3.c.add("cpp"); 4.c.add("php");5.c.add("c#"); 6.c.add("objective-c");7.Iterator<String> it = c.iterator();8.while (it.hasNext()) {9. String str = it.next();10. System.out.println(str);11.}
1.2.2. remove方法
迭代器还提供了一个方法:void remove()。该方法用于删除迭代器当次从集合中获取的元素。若我们在迭代过程中想删除集合元素时,我们就需要通过该方法来进行。这里需要注意,在使用迭代器遍历集合时是不能通过集合自身提供的remove方法删除元素的,否则迭代器在迭代时会抛出异常。
例如
1.Collection<String> c = new HashSet<String>();2.c.add("java"); 3.c.add("cpp"); 4.c.add("php");5.c.add("c#"); 6.c.add("objective-c"); 7.System.out.println(c); // [cpp, php, c#, java, objective-c] 8.Iterator<String> it = c.iterator();9.while (it.hasNext()) {10. String str = it.next();11. if (str.indexOf("c") != -1) {12. it.remove();13. } 14.} 15.System.out.println(c); // [php, java]
1.2.3. 增强for循环
Java5.0之后推出了一个新的特性,增强for循环,也称为新循环。该循环不通用于传统循环的工作,其只用于便利集合或数组。语法:
for(元素类型 e : 集合或数组){
循环体
}
新循环并非新的语法,而是在编译过程中,编译器会将新循环转换为迭代器模式。所以新循环本质上是迭代器。
例如:
1.Collection<String> c = new HashSet<String>();2.c.add("java");3.c.add("cpp");4.c.add("php");5.c.add("c#");6.c.add("objective-c");7.for (String str : c) {8. System.out.print(str.toUpperCase() + " ");9.}
----------------------------------华丽的分割线----------------------------
欢迎大家补充和指正!
- 黑马程序员---从头开始,回忆JAVA基础之集合(一)
- 黑马程序员---从头开始,回忆JAVA基础之集合(二)
- 黑马程序员---从头开始,回忆JAVA基础之IO流(一)
- 黑马程序员---从头开始,回忆JAVA基础之通信(一)
- 黑马程序员---从头开始,回忆JAVA基础之正则表达式。
- 黑马程序员---从头开始,回忆JAVA基础之Eclipse快捷键
- 黑马程序员---从头开始,回忆JAVA基础之常用词汇
- 黑马程序员---从头开始,回忆JAVA基础之文件操作
- 黑马程序员---从头开始,回忆JAVA基础之反射
- 黑马程序员---从头开始,回忆JAVA基础之代理
- 黑马程序员---从头开始,回忆JAVA基础之IO流(二)
- 黑马程序员---从头开始,回忆JAVA基础之通信(二)
- 黑马程序员---从头开始,回忆JAVA基础之JAVA用十六进制表示浮点数的方法
- 黑马程序员---从头开始,回忆JAVA基础之常用类方法!
- 黑马程序员--Java基础--集合(一)
- 黑马程序员----Java基础之集合类(一)
- 黑马程序员---------Java 基础一 ------集合
- 黑马程序员----Java基础-----集合框架(一)
- ui.ImageView及其子类
- Java多个线程之间处理共享数据的方式
- 算法导论:动态规划
- ZOJ Problem Set - 3811 Untrusted Patrol
- Java4Andriod 从零学起 ---learn12
- 黑马程序员---从头开始,回忆JAVA基础之集合(一)
- ui.ProcessBar及其子类
- 可拖动的DIV
- 【Jason's_ACM_解题报告】Andy's First Dictionary
- NYOJ 114 某种序列【大数】
- UI--Toast自定义时间(一) 反射
- ui.Dialog及其子类
- Struts2与Spring整合
- ui.View&ViewGroup