黑马程序员--Java集合框架(一)
来源:互联网 发布:淘宝网店开店技巧 编辑:程序博客网 时间:2024/05/17 06:03
——- android培训、java培训、期待与您交流! ———-
集合框架
集合的由来
我们学习的Java是一种面向对象的语言,而在我们使用的过程中,我们的很多操作都是通过对象来实现的,为了方便对多个对象进行操作,我们就要对着多个对象进行存储,存储自然需要容器,那么这个容器是什么呢?Java就给我们提供了集合来供我们使用。
集合和数组的区别
1.长度区别
数组:长度固定
集合:长度可变
2.内容区别
数组:可以是基本类型,也可以是引用类型
3.元素内容
数组:只能存储同一种类型
集合:可以存储不同类型(一般存储的是同一种类型)
集合的继承体系结构
在说集合的详细内容前,我们先来看看集合的继承体系结构
Collection
Collection集合是整个继承体系结构的顶层,是所有集合的头儿,它的子体系有重复的,有唯一的,有有序的,有无序的。
Collection方法演示
public class CollectionDemo { public static void main(String[] args) { // 测试不带All的方法 // 创建集合对象 // Collection c = new Collection(); //错误,因为接口不能实例化 Collection c = new ArrayList(); // boolean add(Object obj):添加一个元素 // System.out.println("add:"+c.add("hello")); c.add("hello"); c.add("world"); c.add("java"); // void clear():移除所有元素 // c.clear(); // boolean remove(Object o):移除一个元素 // System.out.println("remove:" + c.remove("hello")); // System.out.println("remove:" + c.remove("javaee")); // boolean contains(Object o):判断集合中是否包含指定的元素 // System.out.println("contains:"+c.contains("hello")); // System.out.println("contains:"+c.contains("android")); // boolean isEmpty():判断集合是否为空 // System.out.println("isEmpty:"+c.isEmpty()); //int size():元素的个数 System.out.println("size:"+c.size()); System.out.println("c:" + c); }}
Collection中测试带All的方法
import java.util.ArrayList;import java.util.Collection;/* * boolean addAll(Collection c):添加一个集合的元素 * boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有) * boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有) * boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? */public class CollectionDemo2 { public static void main(String[] args) { // 创建集合1 Collection c1 = new ArrayList(); c1.add("abc1"); c1.add("abc2"); c1.add("abc3"); c1.add("abc4"); // 创建集合2 Collection c2 = new ArrayList(); //c2.add("abc1"); //c2.add("abc2"); //c2.add("abc3"); //c2.add("abc4"); c2.add("abc5"); c2.add("abc6"); c2.add("abc7"); // boolean addAll(Collection c):添加一个集合的元素 // System.out.println("addAll:" + c1.addAll(c2)); //boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有) //只要有一个元素被移除了,就返回true。 //System.out.println("removeAll:"+c1.removeAll(c2)); //boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有) //只有包含所有的元素,才叫包含 // System.out.println("containsAll:"+c1.containsAll(c2)); //boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? //假设有两个集合A,B。 //A对B做交集,最终的结果保存在A中,B不变。 //返回值表示的是A是否发生过改变。 System.out.println("retainAll:"+c1.retainAll(c2)); System.out.println("c1:" + c1); System.out.println("c2:" + c2); }}
集合的遍历
第一种方式
Object[] toArray():把集合转成数组,可以实现集合的遍历
import java.util.ArrayList;import java.util.Collection;public class CollectionDemo3 { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 添加元素 c.add("hello"); // Object obj = "hello"; 向上转型 c.add("world"); c.add("java"); // 遍历 // Object[] toArray():把集合转成数组,可以实现集合的遍历 Object[] objs = c.toArray(); for (int x = 0; x < objs.length; x++) { // System.out.println(objs[x]); // 我知道元素是字符串,我在获取到元素的的同时,还想知道元素的长度。 // System.out.println(objs[x] + "---" + objs[x].length()); // 上面的实现不了,原因是Object中没有length()方法 // 我们要想使用字符串的方法,就必须把元素还原成字符串 // 向下转型 String s = (String) objs[x]; System.out.println(s + "---" + s.length()); } }}
第二种方式:迭代器遍历(集合特有的遍历方式)
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class IteratorDemo { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建并添加元素 // String s = "hello"; // c.add(s); c.add("hello"); c.add("world"); c.add("java"); // Iterator iterator():迭代器,集合的专用遍历方式 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 while (it.hasNext()) { // System.out.println(it.next()); String s = (String) it.next(); System.out.println(s); } }}
存储自定义对象并遍历
上面是存储基本类型的集合的遍历方式,下面是存储引用类型的集合的遍历方式
首先写一个自定义学生对象类
public class Student { // 成员变量 private String name; private int age; // 构造方法 public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } // 成员方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
写一个学生测试类
import java.util.ArrayList;import java.util.Collection;public class StudentDemo { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建学生对象 Student s1 = new Student("周杰伦", 30); Student s2 = new Student("王力宏", 27); Student s3 = new Student("林俊杰", 33); Student s4 = new Student("刘德华", 45); Student s5 = new Student("罗志祥", 22); // 把学生添加到集合 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); // 把集合转成数组 Object[] objs = c.toArray(); // 遍历数组 for (int x = 0; x < objs.length; x++) { // System.out.println(objs[x]); Student s = (Student) objs[x]; System.out.println(s.getName() + "---" + s.getAge()); } }}
思考:迭代器为什么不定义成一个类,而是定义成一个接口?
其主要原因是因为迭代器是依赖于集合存在的。假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是Java中有很多的集合类,而这些集合类的数据结构是不同的,那么最终的存储方式和遍历方式也是不同的,进而他们的遍历方式也应该是不一样的,所以最终,就没有定义迭代器类。而无论你使用哪种集合,你都应该具备对元素的操作,最好再有判断功能来辅助,这样就比较符合先判断再获取的逻辑。也就是说,判断和获取这两个功能应该是一个集合遍历所具备的,但是每种集合的方式又不太一样,所以就把这两个功能提取出来,并不提供具体实现,这就是接口。真正的具体实现类则是以内部类的方式体现的。
List
List是Collection的子接口,其特点是有序(存储顺序和取出顺序一致);可重复。
import java.util.Iterator;import java.util.List;import java.util.ArrayList;public class ListDemo { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 创建字符串并添加字符串 list.add("hello"); list.add("world"); list.add("java"); // 遍历集合 Iterator it = list.iterator(); while (it.hasNext()) { String s = (String) it.next(); System.out.println(s); } }}
List的特有功能
import java.util.ArrayList;import java.util.List;/* * List集合的特有功能: * A:添加功能 * void add(int index,Object element):在指定位置添加元素 * B:获取功能 * Object get(int index):获取指定位置的元素 * C:列表迭代器 * ListIterator listIterator():List集合特有的迭代器 * D:删除功能 * Object remove(int index):根据索引删除元素,返回被删除的元素 * E:修改功能 * Object set(int index,Object element):根据索引修改元素,返回被修饰的元素 */public class ListDemo { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 添加元素 list.add("hello"); list.add("world"); list.add("java"); // void add(int index,Object element):在指定位置添加元素 // list.add(1, "android");//没有问题 // IndexOutOfBoundsException // list.add(11, "javaee");//有问题 // list.add(3, "javaee"); //没有问题 // list.add(4, "javaee"); //有问题 // Object get(int index):获取指定位置的元素 // System.out.println("get:" + list.get(1)); // IndexOutOfBoundsException // System.out.println("get:" + list.get(11)); // Object remove(int index):根据索引删除元素,返回被删除的元素 // System.out.println("remove:" + list.remove(1)); // IndexOutOfBoundsException // System.out.println("remove:" + list.remove(11)); // Object set(int index,Object element):根据索引修改元素,返回被修饰的元素 System.out.println("set:" + list.set(1, "javaee")); System.out.println("list:" + list); }}
List集合的特有遍历功能
存储字符串并遍历
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListDemo2 { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 存储元素 list.add("hello"); list.add("world"); list.add("java"); list.add("javaee"); list.add("android"); list.add("javaee"); list.add("android"); // 遍历集合 Iterator it = list.iterator(); while (it.hasNext()) { String s = (String) it.next(); System.out.println(s); } }}
存储自定义对象并遍历
自定义学生类
public class Student { // 成员变量 private String name; private int age; // 构造方法 public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } // 成员方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
学生对象遍历测试类
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListDemo { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 创建学生对象 Student s1 = new Student("孙悟空", 30); Student s2 = new Student("猪八戒", 40); Student s3 = new Student("沙悟净", 27); // 把学生对象添加到集合对象中 list.add(s1); list.add(s2); list.add(s3); // 遍历 Iterator it = list.iterator(); while (it.hasNext()) { Student s = (Student) it.next(); System.out.println(s.getName() + "---" + s.getAge()); } }}
常见数据结构
栈
特点:先进后出,例如子弹夹,第一次发射的是最后一颗压入弹夹的子弹,那么最后一个发射的就是压入的第一颗子弹
队列
特点:先进先出。例如排队打饭,第一个排队的第一个吃上饭,最后一个排队的最后才能吃饭。
数组
特点:存储同一种类型的多个元素的容器,有索引,方便获取
链表
由一个链子把多个结点连起来组成的数据
结点:由数据早(数据域)和地址(指针域)组成
——- android培训、java培训、期待与您交流! ———-
- 黑马程序员:java集合框架(一)
- 黑马程序员--Java集合框架(一)
- 黑马程序员:JAVA集合框架知识点一
- 黑马程序员 java集合框架笔记(一)
- 黑马程序员----Java基础-----集合框架(一)
- 黑马程序员_全面接触Java集合框架(一)
- 黑马程序员——JAVA集合框架(一)
- 黑马程序员 JAVA基础-集合框架(一)
- 黑马程序员——Java之集合框架(一)
- 黑马程序员——Java集合框架(一)
- 黑马程序员——JAVA集合框架(一)
- 黑马程序员——JAVA基础----集合框架(一)
- 黑马程序员--集合框架笔记(一)
- 黑马程序员_集合框架(一)
- 黑马程序员 集合框架(一)
- 黑马程序员--集合框架(一)
- 黑马程序员------集合框架(一)
- 黑马程序员_JAVA_集合框架(一)
- Java IO流->处理流->标准输入输出流:System.in&System.out
- 内存缓冲区fflush(stdin)
- JavaScript内核笔记02-对象、原型、this指针
- json字符串的类型以及在javascript中的解析方式
- 网络篇 - 04.网络数据解析(JSON)
- 黑马程序员--Java集合框架(一)
- POJ 1274--The Perfect Stall【二分图 && 最大匹配数 && 水题】
- HDU 2522 求循环小数问题
- 网络基础知识
- Redmine中的wiki支持HTMl语言
- 【JavaScript】DOM操作表格
- 一些常用的webservice接口
- 64位计算机注册32位插件-----TeeChart
- 杂谈: 关于打赏的功能