java——集合-其他

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(),游标会向后移动一位。

同步化(线程安全)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:V...
    hutuxiaogui阅读 677评论 0 10
  • 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:V...
    独念白阅读 768评论 0 2
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,378评论 0 4
  • 在《第6章 获得掌控:组织管理》的开头,丘吉尔的这句话让人发人深省,即“在人生的前25年我渴望自由,在接下...
    进釆阅读 146评论 0 0
  • 30岁的我对未来充满了期待,看着女儿回味着自己的童年,感叹着时间过的真快!不能虚度年华,真的是儿时无忧叹日长,长大...
    在路上的马哥阅读 183评论 0 0