Java 时间
1 时间标准:long GMT UTC
2 Date Calendar
3 DateFormat String Date
集合和数据结构(集合的底层用数组实现)
1 数学集合:
2 在软件开发中应用广泛:商品列表
3 Java中使用接口Collection定义了集合的概念
Collection接口中定义了集合的功能抽象:
添加元素(add),删除元素(remove),集合的并(addAll),集合的交(),
集合差(retainAll),...
说明它底层 是调用的equals方法,所以我们要重写 。
collection中学习的方法:
add();
addAll()
contains();包含一个
containsAll();包含多个
retainAll()
4 Java提供了集合的实现类: ArrayList,
LinkedList, HashSet等
5 LinkedList 是使用双向循环链表实现的线性表集合
ArrayList 是使用变长数组实现的线性表集合
6 线性表(List接口)是经常使用的.
List:(继承了Collection,扩展成为一个有顺序的集合,叫做线性表)
//线性表就是人们排除买票,是有顺序的。
//add(E e)向列表的尾部添加指定的元素(可选操作)。在排序最后面增加一个人。
//也可插队,用add(int index,E element)在index位置插入一个人,后面的人依次往后移动一个。
//addAll()一大批插入到后面 addAll(int index, Collection<? extends E> c)大量插队
//equals(Object o) 比较指定的对象与列表是否相等,比较整个序列相同,且序列的元素也相同。
//indexOf(Object o)返回序列中第一次出现这个对象的位置,如果没有则返回1,与string中的indexof方法相同。
//remove(Object o) 从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
//removeAll(Collection<?> c) 从列表中移除指定 collection 中包含的其所有元素(可选操作)。
//set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)。
//toArray()返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。说明底层还是数组实现。
ArrayList是数组高层次的一个替代品。十分常用。
数组+操作=ArrayList
Long + 操作 = Date()
char[] + 操作 = StringBuilder
其实什么是对象 ,就是数据+对象 。
所以,没有右边的东西,一样能够写程序,但是为了方便,把它们封装起来,用右边的方便,简单。
因此,在现实生活中,直接用ArrayList的比较多。
十分重要的洗牌:(很好的说明线性表中的各个方法)
Random random = new Random();
for (int i = cards.size()-1; i >0; i--) {
int idx = random.nextInt(i);
//从后往前依次取出每张牌
Card card2 = cards.get(i);
//把取出的那张牌放到随机数上。
//但是set方法返回的是以前在指定位置的元素
card2 = cards.set(idx, card2);
//然后把以前位置指定的元素放到刚刚取到元素的位置
//相当于两两替换。
cards.set(i, card2);
}
System.out.println(cards);
//下面这行代码可以三合一,这是经典的集合中的两个两个的互换,不需要借助中间变量。
// cards.set(i, cards.set(idx, cards.get(i)));
//以前在数组中我们写两两互换的时间,要借助一个中间变量,而在这里面不用借助中间变量即可实现。
//且记:list有序,所以才能有这个方法get(i)。而set肯定是无序的。HashMap是根据key查找值的。
7 Set 无序且不重复
HashSet(利用HashMap实现, 就是只有key的HashMap)
boolean add(E e)
如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
说明set内的不能够重复的。
List
1 ArrayList 新
2 Vector 旧(1.2以前)
Map (它是用散列表实现的,也是数组实现)
1 HashMap 新
2 Hashtable 旧 (1.2以前)
//HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
//HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
//key不允许重复,value肯定允许重复了。
boolean containsKey(Object key)
如果此映射包含对于指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
putAll(Map<? extends K,? extends V> m)
将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。
区别:
List
1 LinkedList 采用双向循环链表实现
2 ArrayList 变长数组算法实现 新的 快 非线程安全
3 Vector 变长数组算法实现 早期提供 慢 线程安全
然后,list内部是 有序的(get(3))、可以重复、的集合。
Map (它是用散列表实现的,也是数组实现)
key不允许重复,value肯定允许重复了。
Set 无序 且 不重复(因为它是用Map的key实现的,所以肯定不能重复)
HashSet(利用HashMap实现, 就是只有key的HashMap)
集合的应用
贪吃蛇
1 蛇包含节点的(线性)集合,
节点在行列坐标(i,j)的位置
2 蛇可以走, 继续向当前方向走一步
也可以向指定方向走一步, 不能反向
蛇可以吃, 一个坐标上的东西.(以后再考虑)
3 蛇在一个面板中运行, 面板控制行列坐标
面板可以提供文字界面的打印方法, 显示出一条蛇
4 重构Worm类提供检查坐标是否在蛇身上的方法
5 提供测试类测试蛇的面板运行.
List 集合的实现
1 LinkedList 采用双向循环链表实现
2 ArrayList 变长数组算法实现 新的 快 非线程安全
3 Vector 变长数组算法实现 早期提供 慢 线程安全
预习: 集合的迭代 和 泛型 和 异常
集合的迭代(遍历)(模仿了数鸡蛋的方式)
1 java 接口 Iterator(迭代器) 描述了逐一遍历的
方法.
2 Iterator 描述了一个顺序结构, 并且有一个游标
概念, 游标默认在第一个元素之前. 调用方法
hasNext() 可以检查游标是否有下一个元素.
使用next() 方法移动游标,并且返回当前游标指向的
元素. 这两个方法经常与while循环组成模式化
结构, 用来遍历集合内容. 是常见的标准结构.
3 凡是对集合的遍历都应采用Iterator接口实现.
编程中十分常见.
4 集合在迭代期间不能调用集合的更新方法 add()
remove set 等
5 如果需要迭代时候删除集合内容, 可以调用迭代器的
删除方法 ite.remove() 删除当前元素.