1、 Collection 集合
集合类的特点集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
iterator 迭代器 取出集合中的元素
两个常用子类:
a. List
b. Set
2、List 序列
a. 有序的; 存入的顺序和取出的顺序一致
b. 元素是有索引的;
c. 元素可以重复
了解List接口的特有方法,注意:这些特有方法都是围绕着脚标定义的。
a. add(index,element);
b. remove(index);c. set(index,element);
d. get(index);
List接口支持,增删改查操作
---ListIterator 列表迭代器,可以同时操作容器
---Victor:数组结构的,是同步的。被ArrayList替代,因为效率低
---ArrayList:数据结构是数组结构,是不同步的。查询速度很快
---LinkedList:数据结构是链表结构,是不同步的。增删的速度很快
List类中支持对对集合中元素进行迭代的同时对元素进行增、删、改、查
3、 注意LinkedList中的特有的方法,可以利用这些方法模拟堆栈,或队列
addFirst();
addLast();
getFirst();
getList();
removeFirst();
removeLast();
offerFirst(E e);
offerLast(E e);
peekFirst();
peekLast();
4、 set: 集 元素不可以重复
set里面没有特殊的方法,其方法和Collection方法一致
5、 set的子类
---HashSet: 是不同步的 查询速度快,不能重复
记住:存储到哈希表中的对象,必须覆盖hashCode和equals方法。建立在哈希表判断元素唯一性的方式。
---TreeSet:是不同步的 他可以对set集合中的元素进行排序。 数据结构是二叉树。
TreeSet排序有两种方式:
第一种:让元素自身具备比较性。让元素对象实现Comparable接口,覆盖compareTo方法。
但是,需求中,需要元素的非自然排序时,或者元素本compareTo身就不具备自然排序,怎么办?
第二种:让容器具备比较性。其实就是定义一个比较器,就是实现Comparator接口,覆盖compare方法。
List结合判断元素是否相同使用的是equals方法;
HashSet集合判断元素相同,依据hashCode和equals方法;
TreeSet集合判断元素相同,依据compareTo或者compare方法的return 0;
ArrayLIst:数组结构,所属于List,想到索引,查询快
LinkedList:链表结构,所属于List,想到增删快
HashSet:哈希表结构,所属于Set,想到唯一性,查询速度快
TreeSet:二叉树结构,所属于Set,想到唯一性,而且排序,自然排序Comparable,compareTo 比较器排序,comparator compare方法
HashSet hs = new LinkedHashSet();//在哈希表基础上保证有序。
6、 泛型:先明确类型,存储时,如果类型不匹配,就编译时报错。
a.JKD 1.5版本出现的新特性;
b.泛型将运行时期的问题转移到了编译时期。
c.避免了强制转换的麻烦
d.泛型技术是用于编译时期的技术。
7、 泛型的体现:
<>这就是用于定义类型参数的符号;泛型可以简单的理解为,接收具体的元素类型。
对源码进行编译时,通过泛型进行类型的检查;如果类型没有问题,则将源码编译成class文件。
注意,class文件中是不带有泛型信息的,这种情况称之为泛型擦除。
8、 类型操作的对象类型不确定,将泛型定义在类上;
方法中操作的类型不确定,将泛型定义在方法上。
如果是在静态方法上使用泛型,该泛型必须定义在方法上。
9、 泛型接口:定义的类实现了一个带有泛型的接口,覆盖接口方法的时候要符合泛型类型;
在实现接口的时候,不明确泛型的类型,覆盖方法的时候继续使用泛型;
10、 泛型的限定:分两种 上限 下限:
? extends E: 上限 接收E类型或者E的子类型
? super E:下限 接收E类型或者E的父类型
11、 Map: 视图
a.Map集合中存储的是一对儿元素,键和值。
b.必须保证键的唯一性。
c.如果存储键相同,值会覆盖。
存的方式:put(key,value);
取得方式:keySet(),entrySet().values();原理:就是将Map集合转换成set集合或者Collection,在通过Iterator取出。
Map子类
---Hashtable:哈希表结构,同步的。null不可以作为键和值
---HashMap:哈希表结构,不同步的。替代了Hashtable。允许null以作为键和值 不保证顺序
---TreeMap:基于二叉树,不同步的,可以对map集合中的键进行排序。
12、 什么时候用Map集合?
在分析需求中,如果出现了映射关系,就要先想到具备对应关系的容器。
比如:数组,list,map
如果对应关系的一方是有序的数字,可以考虑数组和list,元素固定考虑list。
如果对象关系的一方没有有序的数字,就要想到map。
通常这些对应关系的容器都可以用于查表法。
13、 Arrays:用于操作数据的工具类提供的很多常见的方法比如排序,搜索等
该类中的方法都是静态的。
14、 数组转成集合List。List asList([]);
好处:可以使用集合List的方法来操作数组中的元素。可以使用集合该查方法,只要不改变数组长度都可以。
弊端:不可以使用集合的增删方法
List集合使用的最终还是这个数组,数组的固定长度的。所以不可以对其进行增删。
特殊情况:
如果数组中存储的是基本数据类型,那么asList会将这个数组实体作为集合中的元素。
如果数组中存储的都是对象,那么asList会将数组中的元素作为集合中的元素
15、 将集合转成数组。
如果传递的数组长度小于集合的长度,在toArray内部会自动创建一个长度和集合相同的数组。用于存储集合的元素。
如果传递的数组长度大于等于集合的长度,则使用该数组存储集合的元素
一般情况下最好使用集合的size();
限定数组的增删。
16、 Collections:
a.用于操作集合的工具类。
b.提供了很多静态方法。
比如对List集合排序,二分查找,位置置换。对排序的元素进行逆转。reverseOrder
还可以获取集合的最大值。
最牛叉的是将非同步的集合转换成同步的集合synchronizedXXX
17、 新的for循环。
格式:for(元素类型 变量名:Collection集合or数组)
{
执行语句;
}
18、 传统for和foreach的区别?
foreach循环必须有被遍历的目标,要么是Collection,要么是数组。
建议遍历数组是,用传统for循环,因为可以对数组的角标进行操作。
19、 可变参数 int... arr
可变参数用于简化书写,
注意:只能定义在参数列表的最后。
20、 System.getProperty("line.separator");可以实现在任何操作系同下的换行,因为该功能获取了当前系统的换行符。
21、 RunTime类:没有结构函数,不可以实例化,但是还提供了非静态方法。所以应该会提供静态的返回值类型为RunTime的方法获取该对象。
22、 Math:用于数学运算的类。提供了数学运算的静态方法
ceil 返回大于参数的最小整数
floor 返回小于参数的最大整数
round 四舍五入
max(a,b)返回两个数中最大的一个
pow(a,b);返回a的b次幂
23、 日期对象和毫秒值之间的转换。
毫秒值转成--->日期对象
a.new Date(long);构造函数方法;
b.setTime(long);
获取日期对象,可以通过对对象的方法对该日期进行指定字段的操作。
日期对象转成毫秒值--->通常用于进行运算--->通过Date对象的getTime方法
24、 import的出现是为了简化类名的书写