1.集合
(1)单列集合java.util.Collection
(2)双列集合java.util.Map
2.Collection集合体系
(1) java.util.List
(2) java.util.Set
3.Collection 常用API
- public boolean add(E e) : 把给定的对象添加到当前集合中 。
- public void clear() :清空集合中所有的元素。
- public boolean remove(E e) : 把给定的对象在当前集合中删除。
- public boolean contains(E e) : 判断当前集合中是否包含给定的对象。
- public boolean isEmpty() : 判断当前集合是否为空。
- public int size() : 返回集合中元素的个数。
- public Object[] toArray() : 把集合中的元素,存储到数组中。
4.Iterator迭代器:即Collection集合元素的通用获取方式
(1)注意:
tips::在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生
java.util.NoSuchElementException没有集合元素的错误。
(2)实现原理:
首先通过调用t集合的iterator()方法获得
迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取
出,否则说明已到达了集合末尾,停止遍历元素。
(3) 使用迭代器遍历集合:
List coll = new ArayLisr<>();
Iterator<String> iter = coll.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
5.增强for循环
增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
6.泛型
泛型的三种用法:
(1)泛型类: class 类名称<泛型> 创建对象的时候确定
(2)泛型接口 interface 接口名称<泛型> 要么实现类直接指定泛型是谁;要么实现类也是一个泛型类
(3)泛型方法 修饰符 <泛型> 返回值类型 方法名称(参数类型 参数名称) {方法体}
使用泛型的好处:
(1)保证类型统一,确保类型安全。
(2)将可能发生的类型安全问题,从运行期提前到编译期。(有问题尽量在javac的时候就暴露出来最好,别等到java运行时再暴露)
(3)省去向下转型的麻烦。
(4)让代码模板化。
public class GenericDemo {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("abc");
coll.add("itcast");
coll.add(5);
//由于集合没有做任何限定,任何类型都可以给其中存放 Iterator it = coll.iterator();
while(it.hasNext()){
//需要打印每个字符串的长度,就要把迭代出来的对象转成String类型
String str = (String) it.next();
System.out.println(str.length());
}
}
}
7.泛型扩展
- 怎么理解类型擦除?变为原始类型
Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。
如在代码中定义List<Object>
和List<String>
等类型,在编译后都会变成List
,JVM看到的只是List,而由泛型附加的类型信息对JVM是看不到的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法在运行时刻出现的类型转换异常的情况,类型擦除也是Java的泛型与C++模板机制实现方式之间的重要区别。
- 怎么判断这个是否为原始类型?
8.Collections-工具类
public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。
public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。
public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。
public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序
案例1:
案例2:Comparator 用法
public class CollectionsDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("cba");
list.add("aba");
list.add("sba"); list.add("nba");
//排序方法 按照第一个单词的降序
Collections.sort(list, new Comparator<String>() {
@Override public int compare(String o1, String o2) {
return o2.charAt(0) ‐ o1.charAt(0); }
});
System.out.println(list);
}
}
案例3:Comparator 与 Comparable 用法:
集合的对象实现 Comparable接口,重写compare方法