美文网首页
java——集合-其他

java——集合-其他

作者: 打死你的小乌龟 | 来源:发表于2018-08-29 23:59 被阅读0次

Collections集合工具类

同数组的工具类Arrays相同,集合的工具类为Collections,其中提供了许多的方法,诸如排序、二分查找、打乱、填充等操作。
案例:Collections

// 1.排序
Collections.sort(names);
System.out.println(names);
// 2.二分查找
int index = Collections.binarySearch(names, "Jerry");
System.out.println(index);
// 3.乱序
Collections.shuffle(names);
System.out.println(names);

提供了大量的方法用于对集合中元素排序,查找,修改等操作
ArrayList list = new ArrayList();
Collections.addAll(list, "a","b");//添加元素
Collections.reverse(list);//顺序反转
Collections.sort(list);//自然顺序
Collections.shuffle(list);//随机排序 “洗牌”
Collections.max(list);//查找最大
Collections.replaceAll(list, "b", "r");//替换
集合复制

Java默认的复制规则是浅表(浅层)复制 集合复制有2种方式:

  1. clone() 方法
    clone()方法是Object定义的
  2. 使用"复制构造器"
    1、Map map = new HashMap();
    Map map2 = new HashMap(map);
    2、List list1 = new ArrayList();
    List list2 = new LinkedList(list1);

【案例1】浅表复制_clone()方法

import java.util.ArrayList;
public class CollectionClone {
public static void main(String[] args) {
ArrayList<Foo> list = new ArrayList<Foo>();
list.add(new Foo());
list.add(new Foo());
// 1.经过clone()产生一个新的对象list2
ArrayList<Foo> list2 = (ArrayList<Foo>) list.clone();
// 2.list3和list是对同一个对象的引用
ArrayList<Foo> list3 = list;
System.out.println(list3 == list);
// 3.浅表(浅层)复制测试
// 第一层复制了
System.out.println(list2 == list);
// 第二层元素没有被复制
System.out.println(list2.get(0) == list.get(0));
}
}
class Foo {
int a = 1;
}
true
false
true
注:

1、list2是浅表复制,仅第1层复制了,第2层复制的是对象的引用。
2、list3是赋值。
3、clone()只能复制本类型。

案例2】浅表复制_"复制构造器":

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
public class CollectionClone2 {
public static void main(String[] args) {
ArrayList<Foo2> list = new ArrayList<Foo2>();
list.add(new Foo2());
list.add(new Foo2());
// 复制构造器演示
// 1.所有集合都有“复制构造器”,都是浅表复制
// 2.“复制构造器”的参数是多态,可以在不同种类的集合间复制
LinkedList<Foo2> list4 = new LinkedList<Foo2>(list);
HashSet<Foo2> set = new HashSet<Foo2>(list);
System.out.println(list4.containsAll(list));
System.out.println(set.containsAll(list));
}
}
class Foo2 {
int a = 1;
}

注:

1、“复制构造器”可以复制不同类型的集合,使用起来较方便。
2、继承自Map的集合同继承自Collection的集合不能相互复制(结构不同)。

数组与集合的转换
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Array2Collection {
public static void main(String[] args) {
String[] names = { "A", "B", "C" };
// 第一步,只读list(不能增删操作)
List list = Arrays.asList(names);
// list.add("D"); // unsupportedOperationException
// list.remove(0); // unsupportedOperationException
System.out.println(names);
// 第二步,复制为全功能list
list = new ArrayList<String>(list);
list.add("D");
list.remove(0);
System.out.println(list);
// 第三步,放入set集合
Set set = new HashSet<String>(list);
System.out.println(set);
}
}
集合的迭代,是一种遍历算法。
  1. 迭代操作举例:播放列表的“逐个播放”;将扑克牌“逐一发放”。
  2. java使用Iterator接口描述了迭代模式操作。
    Iterator中的方法,与门为while循环设计。
  3. Iterator的实例可以从集合对象获得,是这个集合的一个元素序列视图,默认包含一个操作游 标(在第一个元素之前)。
    1、hasNext()方法,可以检查游标是否有下一个元素。
    2、next() 方法,移动游标到下一个元素,并丏返回这个元素引用。
    使用while循环配合这个两个方法, 可以迭代处理集合的所有元素。
    4) 迭代时可以使用迭代器remove() 方法删除刚刚迭代的元素在迭代过程中
    1、迭代时不能使用集合方法(add, remove, set) 更改集合元素!

1、hasNext()和next()方法是模式化的,配合while循环使用。
2、注意:每调用一次next(),游标会向后移动一位。

同步化(线程安全)

相关文章

网友评论

      本文标题:java——集合-其他

      本文链接:https://www.haomeiwen.com/subject/sidxwftx.html