1.类集合
- 集合框架
- Collection接口
- List接口
- ArrayList类
- Iterator迭代器接口
- Vector类
- LinkedList类
2.集合类
集合是存储对象最常用的一种方式(容器)。Java中,集合也是类,真正用来存储东西的是某种集合类的实例对象。
3.集合类和数组的区别
数组:
- 长度是固定的;
- 可以存储基本数据类型;
- 也可以存储对象的引用;
- 必须是相同类型的数据;
集合:
- 长度是可变的
- 只能用于存储对象的引用
- 对象可以是不同类型。
4.Collection接口概述
- Collection层次结构中的根接口
- Collection表示一组对象,这些对象也称collection的元素。
- 一些collection允许有重复元素,而另一些不允许
5.Collection接口
List接口:可存放重复元素,元素存取是“有序”的。
Set接口:不可以存放重复元素,通常元素存取是“无序”的,也有一些实现类元素是“有序”的。
“有序”“无序”指的是存放元素时是否会记住元素存放的顺序,并非对元素进行“排序”。
6.Collection接口中的方法
添加操作:
- boolean add(Object e)
- boolean addAll(Collection c)
删除操作:
- boolean remove(Object o)
- boolean removeAll(Collection c)
查询操作:
- int size()
判断操作:
- boolean isEmpty()
- boolean contains(Object obj)
- boolean containsAll(Collection c)
7.Collection接口中的方法:迭代器
迭代操作:Iterator iterator()
说明:
- 迭代器不保证取出元素的顺序和存入的顺序一致。
- 迭代器本事时一个接口,该方法返回的时一个迭代器实例对象。通常使用的是接口多态使用迭代器。
迭代器中常用的两个方法:
- boolean hasNext():判断是否有下一个元素
- Object next():取出下一个元素
8.迭代器读取元素示意图
Collection c = new ArrayList();//创建集合对象
Iterator it = c.iterator(); //获取此集合的迭代器
while(it.haxNext()){ //遍历这个集合
Object o =it.next();
}
9.List接口中常用类
ArrayList:线程不安全,查询速度快,底层用的是数组,增删慢
LinkedList:线程不安全,链表结构,增删速度快,查询慢
10.List接口的方法&增强for
特有方法:
- void add(int index,Object element);
- Object get(int index);
- Object set(int index,Object element);
增强for:
for(Object obj :c){ } 其中,Object是元素类型,obj是迭代变量名,c是集合名
11.List接口遍历的方式
- 第一种:迭代器遍历
- 第二种:增强for循环
- 第三种:普通for循环配合使用get方法
12.迭代器接口:Iterator
迭代是取出集合中元素的一种方式,因为Collection中有iterator方法,所以每一个子类集合对迭代器。象都具备
方法一:(常用)
Iterator iter = l.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
方法二:
for(Iterator iter = iterator();iter.hasNext();){
System.out.println(iter.next());
}
13.迭代器注意事项
迭代器在Collection接口中是通用的。
迭代器的next方法返回值类型是Object,所以要记得类型转换。
***********************************
习题代码:
**********************************
代码练习:
1.从键盘录入年份,显示当年的二月份有多少天?(使用Calendar类的方法实现)
package com.test1; import java.util.Calendar; import java.util.Scanner; /* * 从键盘录入年份,显示当年的二月份有多少天?(使用Calendar类的方法实现) */ class Demo3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("input a year:"); int year = sc.nextInt(); // Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, 1); System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH)); } }
2.从键盘录入两个时间(包含年-月-日),显示二者之间的天数差
package com.test1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /* * 从键盘录入两个时间(包含年-月-日),显示二者之间的天数差 */ public class Demo4 { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); System.out.println("input two date:(yyyy-MM-dd)"); String first = sc.next(); String second = sc.next(); // Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(first); Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse(second); System.out.println((d2.getTime() - d1.getTime()) / 1000 / 3600 / 24); } }
package com.test1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /* * 给出生日,求来到世界多少天! */ public class Demo1 { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); System.out.println("input your birthday:(yyyy-MM-dd)"); String birthday = sc.next(); // Date date = new SimpleDateFormat("yyyy-MM-dd").parse(birthday); long time = date.getTime(); System.out.println((System.currentTimeMillis() - time) / 1000 / 3600 / 24); } }