前言
这里介绍了集合框架,然后选取了不同存储方式接口的实现类专门进行其方法及其遍历的展示,还有工具类Collections。
一、集合与数组特点对比
| 集合 | 数组 |
|---|---|
| 长度可变 | 长度固定 |
| 只能存放引用数据类型 | 既可以存放基本数据类型又可以存放引用数据类型 |
| 打印出来是集合(重写了Object类的toString方法) | 不重写Object类的toString方法时打印出来是地址 |
如果希望在集合中存入基本数据类型只需要用其对应的包装类int-integer、char-character、其余将首字母变为大写即可
二、集合框架体系

三、ArrayList成员方法及其遍历
在使用这些成员方法之前,我们要先创建一个ArrayList对象,<>泛型:用于限制集合中存放的数据类型:
ArrayList<Integer> integers = new ArrayList<>();

可以划归为增删改查 四类操作,调用方法很简单,我们来看一下ArrayList的遍历:
1、普通for:
for (int i = 0; i < strings.size(); i++) {
System.out.println("strings.get(+"+i+") = " + strings.get(i));
}
2、增强(高阶)for:
//把strings集合中每一个值赋给o然后输出,并且o的类型是String
for(String o : strings){
System.out.println("o = " + o);
}
3、利用迭代器:
//首先利用iterator方法创建迭代器,然后用迭代器的hasNext方法查看下一个元素是否存在,存在则用next获取,输出
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
对于没有索引的集合,例如Set和Map接口及其实现类一般没有索引,我们可选择高阶for或者定义迭代器
四、HashMap的遍历
与ArrayList不同的是,创建一个HashMap对象需要分别规定键和值的类型,可以通过键查该集合中的元素
HashMap<String, Student> stu = new HashMap<>();
同样的,看一下他是如何遍历的:
1、entrySet: 它是一个set集合,用于获取键值对的集合
Set<Map.Entry<String, Student>> entries = stu.entrySet();
Iterator<Map.Entry<String, Student>> iterator = entries.iterator();
while(iterator.hasNext()){
Map.Entry<String, Student> next = iterator.next();
System.out.println("next.getKey() = " + next.getKey());
System.out.println("next.getValue() = " + next.getValue());
}
2、keySet: 它是所有键的集合,虽然遍历得到的都是键,但是可以通过键拿到值
Set<String> strings = stringStringHashMap.keySet();
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()){
String next = iterator.next();
System.out.println("next = " + next);
System.out.println("stringStringHashMap.get(next) = " + stringStringHashMap.get(next));
}
五、Collections工具类的方法
1、sort: 对集合排序,默认升序
Collections.sort(integers);
如果需要降序,则需要自定义排序规则:
Collections.sort(integers, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
return o1-o2是升序
如果有特定需求,比如对集合对象的某一属性(年龄)进行排序,也可以自己定义一个比较器:
public class PersonCom implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o2.getAge()-o1.getAge();
}
}
然后使用:
Collections.sort(people,new PersonCom());
2、shuffle: 用于打乱集合
Collections.shuffle(integers);
3、reverse:逆置集合
Collections.reverse(integers);
764

被折叠的 条评论
为什么被折叠?



