IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Java集合框架 -> 正文阅读

[系统运维]Java集合框架

目录

集合的概念

Collection接口

1.Collection父接口

2.使用迭代器遍历集合

List接口与实现类

1.列表迭代器

2.List接口实现类

泛型和工具类

??注意

1.泛型类

2.泛型接口

3.泛型方法

4.泛型集合

Set接口与实现类

1.Hashset

2.TreeSet

3.Comparator接口

Map接口与实现类

1.Map父接口

2.HashMap

3.TreeMap

4.Collections工具类


集合的概念

对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。

和数组的区别:

  1. 数组长度固定,集合长度不固定

  2. 数组可以存储基本类型和引用类型,集合只能存储引用类型。

Collection接口

1.Collection父接口

  • 特点:代表一组任意类型的对象,无序、无下标、不能重复

  • 方法:

    • boolean add(Object obj):添加一个对象

    • boolean addAll(Collection c):将一个集合中的所有对象添加到此集合中

    • void Clear():清空此集合中所有对象

    • boolean contains(Object o):检查此集合中是否有o对象

    • boolean equals(Object o):比较此集合中是否与指定对象相等

    • boolean isEmpty():判断此集合是否为空

    • boolean remove(Object o):在此集合中移除o对象

    • int size():返回集合中的元素个数

    • Object [] toArray():将此集合转换成数组

import?java.util.ArrayList;
import?java.util.Collection;
import?java.util.Iterator;
?
public?class?Demo01?{
? ?//Collection接口的使用
? ?//1.添加元素
? ?//2.删除元素
? ?//3.遍历元素
? ?//4.判断
? ?public?static?void?main(String[]?args) {
? ? ? ?//创建集合
? ? ? ?Collection?conllection=new?ArrayList();
? ? ? ?//添加元素
? ? ? ?conllection.add("apple");
? ? ? ?conllection.add("orange");
? ? ? ?conllection.add("banana");
? ? ? ?System.out.println("元素个数"+conllection.size());
? ? ? ?System.out.println(conllection);
? ? ? ?//删除元素
? ? ? ?conllection.remove("apple");
? ? ? ?System.out.println(conllection);
? ? ? ?//遍历元素[重点]
? ? ? ?//使用增强for遍历集合(增强for不需要下标)
? ? ? ?for(Object?obj:conllection){
? ? ? ? ? ?System.out.println(obj);
? ? ? }
?
? ? ? ?//使用迭代器(专门用来迭代集合或遍历集合的方法)
? ? ? ?Iterator?it=conllection.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?String?object=(String)it.next();
? ? ? ? ? ?System.out.println(object);
? ? ? ? ? ?//不能使用collection删除方法,会报并发错误
? ? ? ? ? ?//it.remove();
? ? ? }
? ? ? ?System.out.println(conllection.size());
?
? ? ? ?//判断
? ? ? ?System.out.println(conllection.contains("apple"));
? ? ? ?System.out.println(conllection.isEmpty());
? }
}
?
/*
输出结果:
? ? ?元素个数3
? ? ?[apple, orange, banana]
? ? ?[orange, banana]
? ? ?orange
? ? ?banana
? ? ?orange
? ? ?banana
? ? ?2
? ? ?false
? ? ?false
*/

2.使用迭代器遍历集合

Iterator有三个方法用于遍历集合

  1. hasNext():判断有没有下一个元素

  2. next():获取下一个元素

  3. remove():删除当前元素

import?javax.swing.*;
import?java.util.ArrayList;
import?java.util.Collection;
import?java.util.Iterator;
?
public?class?Demo02?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//新建一个Collection对象
? ? ? ?Collection?collection=new?ArrayList();
? ? ? ?Student?stu1=new?Student("tom",21);
? ? ? ?Student?stu2=new?Student("jerry",17);
? ? ? ?Student?stu3=new?Student("young",20);
? ? ? ?//1添加学生数据
? ? ? ?collection.add(stu1);
? ? ? ?collection.add(stu2);
? ? ? ?collection.add(stu3);
? ? ? ?collection.add(stu3);
? ? ? ?System.out.println(collection.toString());
? ? ? ?//2删除
? ? ? ?collection.remove(stu2);
? ? ? ?System.out.println(collection.toString());
? ? ? ?//3遍历
? ? ? ?//1增强for
? ? ? ?for(Object?obj:collection){
? ? ? ? ? ?Student?s=(Student)obj;
? ? ? ? ? ?System.out.println(s.toString());
? ? ? }
? ? ? ?//2迭代器
? ? ? ?Iterator?it=collection.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?Student?s2=(Student)it.next();
? ? ? ? ? ?System.out.println(s2.toString());
? ? ? }
? }
}
?
/*
输出结果:
? ? ?[Student[name=tom,age=21], Student[name=jerry,age=17], Student[name=young,age=20], Student[name=young,age=20]]
? ? ?[Student[name=tom,age=21], Student[name=young,age=20], Student[name=young,age=20]]
? ? ?Student[name=tom,age=21]
? ? ?Student[name=young,age=20]
? ? ?Student[name=young,age=20]
? ? ?Student[name=tom,age=21]
? ? ?Student[name=young,age=20]
? ? ?Student[name=young,age=20]
*/

List接口与实现类

  • 特点:有序、有下标、元素可以重复。

  • 方法

    • void add(int index,Object o):在index位置上插入对象o

    • boolean addAll(int index,Collection c):将一个集合中的全部元素添加到此集合中的index位置上

    • Object get(int index):返回集合中指定位置的元素

    • List subList(int fromIndex,int tIndex):返回fromIndex和toIndex之间的元素。

import?java.util.ArrayList;
import?java.util.Iterator;
import?java.util.List;
import?java.util.ListIterator;
?
public?class?Demo03?{
? ?//List自接口的使用
? ?public?static?void?main(String[]?args) {
? ? ? ?List?list=new?ArrayList<>();
? ? ? ?//1.添加集合元素
? ? ? ?list.add("apple");
? ? ? ?list.add("huawei");
? ? ? ?list.add("oppo");
? ? ? ?list.add("oppo");
? ? ? ?list.add("oppo");
? ? ? ?System.out.println(list.size());
? ? ? ?System.out.println(list.toString());
? ? ? ?//2.删除
? ? ? ?list.remove("oppo");
? ? ? ?list.remove(1);
? ? ? ?System.out.println(list.toString());
? ? ? ?//3.遍历【重点】
? ? ? ?//3.1for遍历
? ? ? ?for(int?i=0;i<list.size();i++){
? ? ? ? ? ?System.out.println(list.get(i));
? ? ? }
? ? ? ?//3.2增强for
? ? ? ?for(Object?obj:list){
? ? ? ? ? ?System.out.println(obj);
? ? ? }
? ? ? ?//3.3迭代器
? ? ? ?Iterator?it=list.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
? ? ? ?//3.4使用列表迭代器
? ? ? ?ListIterator?lit=list.listIterator();
? ? ? ?while(lit.hasNext()){
? ? ? ? ? ?//从前往后
? ? ? ? ? ?System.out.println(lit.nextIndex());
? ? ? ? ? ?System.out.println(lit.next());
? ? ? }
? ? ? ?//从后往前遍历
? ? ? ?while(lit.hasPrevious()){
? ? ? ? ? ?System.out.println(lit.previousIndex());
? ? ? ? ? ?System.out.println(lit.previous());
? ? ? }
?
? ? ? ?//4判断
? ? ? ?System.out.println(list.contains("oppo"));
? ? ? ?System.out.println(list.isEmpty());
?
? ? ? ?//5获取位置
? ? ? ?System.out.println(list.indexOf("apple"));
? }
}
?
/*
输出结果:
? ? ?5
? ? ?[apple, huawei, oppo, oppo, oppo]
? ? ?[apple, oppo, oppo]
? ? ?apple
? ? ?oppo
? ? ?oppo
? ? ?apple
? ? ?oppo
? ? ?oppo
? ? ?apple
? ? ?oppo
? ? ?oppo
? ? ?0
? ? ?apple
? ? ?1
? ? ?oppo
? ? ?2
? ? ?oppo
? ? ?2
? ? ?oppo
? ? ?1
? ? ?oppo
? ? ?0
? ? ?apple
? ? ?true
? ? ?false
? ? ?0
*/

1.列表迭代器

  1. 列表迭代器可以向前向后任意方向遍历。

  2. 还可以添加、删除、修改元素。

import?java.util.ArrayList;
import?java.util.List;
?
public?class?Demo04?{
? ?public?static?void?main(String[]?args) {
? ? ? ?List?list=new?ArrayList();
? ? ? ?//1.集合不能保存数字类型,在添加数字类型的时候会自动进行一个操作,自动装箱
? ? ? ?list.add(10);
? ? ? ?list.add(20);
? ? ? ?list.add(30);
? ? ? ?list.add(40);
? ? ? ?list.add(50);
? ? ? ?System.out.println(list.toString());
? ? ? ?//2.删除操作
? ? ? ?list.remove(new?Integer(20));
? ? ? ?System.out.println(list.toString());
?
? ? ? ?//3补充方法sublist,含头部含尾
? ? ? ?List?sublist=list.subList(0,2);
? ? ? ?System.out.println(sublist.toString());
?
?
? }
}
?
/*
输出结果:
? ? ?[10, 20, 30, 40, 50]
? ? ?[10, 30, 40, 50]
? ? ?[10, 30]
*/

2.List接口实现类

ArrayList

  • ArrayList【重点】

    • 数组结构实现,查询快,增删慢;

    • JDK1.2版本,运行效率快,线程不安全;

import?java.util.ArrayList;
import?java.util.Iterator;
import?java.util.ListIterator;
?
public?class?Demo05?{
? ?public?static?void?main(String[]?args) {
? ? ? ?ArrayList?al=new?ArrayList();
? ? ? ?//1.添加元素
? ? ? ?Student?s1=new?Student("a",10);
? ? ? ?Student?s2=new?Student("b",20);
? ? ? ?Student?s3=new?Student("c",30);
? ? ? ?al.add(s1);
? ? ? ?al.add(s2);
? ? ? ?al.add(s3);
? ? ? ?System.out.println(al.size());
? ? ? ?System.out.println(al.toString());
?
? ? ? ?//2.删除元素
? ? ? ?al.remove(new?Student("a",10));//重写equals方法
? ? ? ?System.out.println(al.size());
?
? ? ? ?//3.遍历元素【重点】
? ? ? ?//3.1迭代器
? ? ? ?Iterator?it=al.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?Student?s=(Student)it.next();
? ? ? ? ? ?System.out.println(s.toString());
? ? ? }
? ? ? ?//3.2列表迭代器
? ? ? ?ListIterator?lit=al.listIterator();
? ? ? ?while(lit.hasNext()){
? ? ? ? ? ?Student?s=(Student)lit.next();
? ? ? ? ? ?System.out.println(s.toString());
? ? ? }
?
? ? ? ?while?(lit.hasPrevious()){
? ? ? ? ? ?Student?s=(Student)lit.previous();
? ? ? ? ??System.out.println(s.toString());
? ? ? ? }
?
? ? ? ?//4.判断
? ? ? ?System.out.println(al.contains(new?Student("b",20)));
? ? ? ?System.out.println(al.isEmpty());
?
? ? ? ?//5.查找
? ? ? ?System.out.println(al.indexOf(new?Student("b",20)));
? }
}
?
/*
输出结果:
? ? ?3
? ? ?[Student[name=a,age=10], Student[name=b,age=20], Student[name=c,age=30]]
? ? ?2
? ? ?Student[name=b,age=20]
? ? ?Student[name=c,age=30]
? ? ?Student[name=b,age=20]
? ? ?Student[name=c,age=30]
? ? ?Student[name=c,age=30]
? ? ?Student[name=b,age=20]
? ? ?true
? ? ?false
? ? ?0
? ? ?-1
*/

Vector

  • Vector

    • 数组结构实现,查询快、增删慢;

    • JDK1.0版本,运行效率慢、线程安全

import?java.util.Enumeration;
import?java.util.Vector;
?
public?class?Demo06?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//创建集合
? ? ? ?Vector?vec?=?new?Vector();
? ? ? ?vec.add("草莓");
? ? ? ?vec.add("苹果");
? ? ? ?vec.add("香蕉");
? ? ? ?System.out.println(vec.size());
? ? ? ?//遍历
? ? ? ?//枚举器
? ? ? ?Enumeration?en=vec.elements();
? ? ? ?while(en.hasMoreElements()){
? ? ? ? ? ?Object?obj=en.nextElement();
? ? ? ? ? ?System.out.println(obj);
? ? ? }
? ? ? ?//判断
? ? ? ?System.out.println(vec.contains("西瓜"));
? ? ? ?//其他方法
? }
}
?
/*
输出结果:
? ? ?3
? ? ?草莓
? ? ?苹果
? ? ?香蕉
? ? ?false
*/

LinkedList

  • LinkedList

    • 链表结构实现,增删快、查询慢。

import?java.util.Iterator;
import?java.util.LinkedList;
?
public?class?Demo07?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//创建对象
? ? ? ?LinkedList?ll=new?LinkedList();
? ? ? ?Student?s1=new?Student("a",10);
? ? ? ?Student?s2=new?Student("b",20);
? ? ? ?Student?s3=new?Student("c",30);
? ? ? ?Student?s4=new?Student("c",30);
? ? ? ?//添加
? ? ? ?ll.add(s1);
? ? ? ?ll.add(s2);
? ? ? ?ll.add(s3);
? ? ? ?System.out.println(ll.size());
? ? ? ?System.out.println(ll.toString());
? ? ? ?//删除
? ? ? ?ll.remove(new?Student("a",10));
? ? ? ?System.out.println(ll.size());
? ? ? ?//遍历
? ? ? ?//for
? ? ? ?for(int?i=0;i<ll.size();i++){
? ? ? ? ? ?System.out.println(ll.get(i));
? ? ? }
? ? ? ?//增强for
? ? ? ?for(Object?o:ll){
? ? ? ? ? ?Student?stu?=?(Student)?o;
? ? ? ? ? ?System.out.println(stu);
? ? ? }
? ? ? ?//迭代器
? ? ? ?Iterator?it=ll.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?Student?s=?(Student)?it.next();
? ? ? ? ? ?System.out.println(s.toString());
? ? ? }
? ? ? ?//判断
? ? ? ?//获取
? ? ? ?System.out.println(ll.indexOf(s2));
? }
}
?
/*
输出结果:
? ? ?3
? ? ?[Student[name=a,age=10], Student[name=b,age=20], Student[name=c,age=30]]
? ? ?2
? ? ?Student[name=b,age=20]
? ? ?Student[name=c,age=30]
? ? ?Student[name=b,age=20]
? ? ?Student[name=c,age=30]
? ? ?Student[name=b,age=20]
? ? ?Student[name=c,age=30]
? ? ?0
*/

泛型和工具类

  • Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。

  • 常见形式有泛型类、泛型接口、泛型方法。

  • 语法:<T,...>T称为类型占位符,表是一种引用类型。

  • 好处:

    1. 提高代码的重用性

    2. 防止类型转化异常,提高代码的安全性

??注意

  1. 泛型只能是引用类型。

  2. 不同泛型类型对象之间不能相互复制。

1.泛型类

//创建一个泛型类
//泛型类
public?class?MyGeneric<T>?{
? ?//使用泛型T
? ?//1.0创建变量
? ?T?t;
? ?//2.0作为方法的参数
? ?public?void?show(T?t){
? ? ? ?System.out.println(t);
? }
? ?//泛型作为方法的返回值
? ?public?T?getT(){
? ? ? ?return?t;
? }
}
public?class?Demo08?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//使用泛型类创建对象
? ? ? ?MyGeneric<String>?mg=new?MyGeneric<>();
? ? ? ?mg.t="hello";
? ? ? ?mg.show("你好");
? ? ? ?String?s=mg.getT();
? ? ? ?System.out.println(s.toString());
?
? ? ? ?MyGeneric<Integer>?mg2=new?MyGeneric<>();
? ? ? ?mg2.t=20;
? ? ? ?mg2.show(30);
? }
}
?
/*
输出结果:
? ? ?你好
? ? ?hello
? ? ?30
*/

2.泛型接口

1.先创建一个泛型接口

//泛型接口
public interface MyInterface<T> {
    String name="张三";

    public T server(T t);
}

2.在创建一个接口实现类

可以在实现类中确定泛型类型

public?class?MyInterfaceImp?implements?MyInterface<String>?{
?
? ?@Override
? ?public?String?server(String?s) {
? ? ? ?System.out.println(s);
? ? ? ?return?s;
? }
}

也可以不确定,继续创建一个泛型类

public?class?MyInterfaceImp2<T>?implements?MyInterface<T>?{
? ?@Override
? ?public?T?server(T?t) {
? ? ? ?System.out.println(t);
? ? ? ?return?t;
? }
}

最终实现类里面,分别用两种类创建对象,发现他们的不同

public class Test {
    public static void main(String[] args) {
        MyInterfaceImp imp1=new MyInterfaceImp();
        imp1.server("xxxxxx");

        MyInterfaceImp2<String> imp2= new MyInterfaceImp2<>();
        imp2.server("aaaaaa");
    }

}

/*
输出结果:
      xxxxxx
      aaaaaa
*/

3.泛型方法

public?class?MyGenericMethod?{
? ?//泛型方法
? ?public?<T>?T?show(T?t){
? ? ? ?System.out.println("泛型方法"+t);
? ? ? ?return?t;
? }
}
public?class?Test?{
? ?public?static?void?main(String[]?args) {
? ? ? ?MyGenericMethod?mm=new?MyGenericMethod();
? ? ? ?mm.show("中国加油");
? ? ? ?mm.show(200);
? ? ? ?mm.show(3.14);
? }
?
}
?
/*
输出结果:
? ? ?泛型方法中国加油
? ? ?泛型方法200
? ? ?泛型方法3.14
*/

4.泛型集合

  • 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致。

  • 特点:

    • 编译时即可检查,而非运行时抛出的异常。

    • 访问时,不必类型转换(拆箱)。

    • 不同泛型之间引用不能相互转换,泛型不存在多态。

public?class?Demo09?{
? ?public?static?void?main(String[]?args) {
? ? ? ?ArrayList<String>?al=new?ArrayList<>();
? ? ? ?al.add("xxx");
? ? ? ?al.add("yyy");
? ? ??// al.add(10);
? ? ? ?//al.add(20);
?
? ? ? ?for(String?o:al){
? ? ? ? ? ?System.out.println(o);
? ? ? }
?
? ? ? ?ArrayList<Student>?al2=new?ArrayList<>();
? ? ? ?Student?s1=new?Student("a",1);
? ? ? ?Student?s2=new?Student("b",2);
? ? ? ?Student?s3=new?Student("c",3);
? ? ? ?al2.add(new?Student("c",4));
? ? ? ?al2.add(s1);
? ? ? ?al2.add(s2);
? ? ? ?al2.add(s3);
?
? ? ? ?Iterator<Student>?it=?al2.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?Student?s=it.next();
? ? ? ? ? ?System.out.println(s.toString());
? ? ? }
? }
}
?
/*
输出结果:
? ? ?xxx
? ? ?yyy
? ? ?Student[name=c,age=4]
? ? ?Student[name=a,age=1]
? ? ?Student[name=b,age=2]
? ? ?Student[name=c,age=3]
*/

Set接口与实现类

  • 特点:无序、无下标、元素不可重复。

  • 方法:全部继承于Collection接口

import?java.util.HashSet;
import?java.util.Iterator;
import?java.util.Set;
?
public?class?Demo01?{
? ?public?static?void?main(String[]?args) {
? ? ? ?Set<String>?set=new?HashSet<>();
? ? ? ?//1.添加数据
? ? ? ?set.add("苹果");
? ? ? ?set.add("华为");
? ? ? ?set.add("小米");
? ? ? ?System.out.println("数据个数"+set.size());
? ? ? ?System.out.println(set.toString());
? ? ? ?//2.删除
? ? ? ?//set.remove("小米");
? ? ? ?//3.遍历【重点】
? ? ? ?//1.增强for
? ? ? ?for(String?str:set){
? ? ? ? ? ?System.out.println(str);
? ? ? }
?
? ? ? ?//2.迭代器遍历
? ? ? ?Iterator<String>?it=set.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
?
? ? ? ?//4.判断
? ? ? ?System.out.println(set.contains("华为"));
? ? ? ?System.out.println(set.isEmpty());
? }
}
?
/*
输出结果:
? ? ?数据个数3
? ? ?[苹果, 华为, 小米]
? ? ?苹果
? ? ?华为
? ? ?小米
? ? ?苹果
? ? ?华为
? ? ?小米
? ? ?true
? ? ?false
*/

1.Hashset

  • 基于HashCode实现元素不重复

  • 当存入元素的哈希码相同时,会调用equals进行确认,如果是true,则拒绝存入后者。

import?java.util.HashSet;
import?java.util.Iterator;
?
public?class?Demo02?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//演示hashset集合的使用
? ? ? ?//哈希表(数组+链表)
? ? ? ?HashSet<String>?hs=new?HashSet<>();
? ? ? ?hs.add("刘德华");
? ? ? ?hs.add("梁朝伟");
? ? ? ?hs.add("林志颖");
? ? ? ?hs.add("周润发");
? ? ? ?//hs.add("周润发");
? ? ? ?System.out.println(hs.size());
? ? ? ?System.out.println(hs.toString());
?
? ? ? ?hs.remove("刘德华");
? ? ? ?System.out.println(hs.toString());
?
? ? ? ?for(String?str:hs){
? ? ? ? ? ?System.out.println(str);
? ? ? }
?
? ? ? ?Iterator<String>?it=hs.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
?
? ? ? ?System.out.println(hs.contains("郭富城"));
? ? ? ?System.out.println(hs.isEmpty());
? }
}
?
/*
输出结果:
? ? ?4
? ? ?[梁朝伟, 林志颖, 周润发, 刘德华]
? ? ?[梁朝伟, 林志颖, 周润发]
? ? ?梁朝伟
? ? ?林志颖
? ? ?周润发
? ? ?梁朝伟
? ? ?林志颖
? ? ?周润发
? ? ?false
? ? ?false
*/
import?java.util.HashSet;
import?java.util.Iterator;
?
public?class?Demo03?{
? ?public?static?void?main(String[]?args) {
? ? ? ?HashSet<Person>?hs=new?HashSet<>();
? ? ? ?Person?p1=new?Person("刘德华",20);
? ? ? ?Person?p2=new?Person("李沐阳",30);
? ? ? ?Person?p3=new?Person("周润发",40);
? ? ? ?Person?p4=new?Person("王茜",50);
?
? ? ? ?hs.add(p1);
? ? ? ?hs.add(p2);
? ? ? ?hs.add(p3);
? ? ? ?hs.add(p4);
?
? ? ? ?System.out.println(hs.size());
? ? ? ?System.out.println(hs.toString());
?
? ? ? ?hs.add(new?Person("王茜",50));//重写hashcode和equals方法
?
? ? ? ?hs.remove(p1);
? ? ? ?System.out.println(hs.toString());
?
? ? ? ?for(Person?per:hs){
? ? ? ? ? ?System.out.println(per);
? ? ? }
?
? ? ? ?Iterator<Person>?it=hs.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
?
? ? ? ?System.out.println(hs.contains(p1));
? }
}
?
/*
? ? ?4
? ? ?[Student[name=周润发,age=40], Student[name=刘德华,age=20], Student[name=王茜,age=50], Student[name=李沐阳,age=30]]
? ? ?[Student[name=周润发,age=40], Student[name=王茜,age=50], Student[name=李沐阳,age=30]]
? ? ?Student[name=周润发,age=40]
? ? ?Student[name=王茜,age=50]
? ? ?Student[name=李沐阳,age=30]
? ? ?Student[name=周润发,age=40]
? ? ?Student[name=王茜,age=50]
? ? ?Student[name=李沐阳,age=30]
? ? ?false
*/

??为了避免添加重复的元素,Person类中需要重写equals方法和hashcode方法

?
 ?@Override
? ?public?boolean?equals(Object?o) {
? ? ? ?if?(this?==?o)?return?true;
? ? ? ?if?(o?==?null?||?getClass()?!=?o.getClass())?return?false;
? ? ? ?Person?person?=?(Person)?o;
? ? ? ?return?age?==?person.age?&&
? ? ? ? ? ? ? ?Objects.equals(name,?person.name);
? }
?
? ?@Override
? ?public?int?hashCode() {
? ? ? ?return?Objects.hash(name,?age);
? }

2.TreeSet

  • 基于排列顺序实现元素不重复。

  • 实现了SortedSet接口,对集合元素自动排序。

  • 元素对象的类型必须实现Comparable接口,指定排序规则。

  • 通过CompareTo方法确定是否为重复元素。

import?java.util.Iterator;
import?java.util.TreeSet;
?
public?class?Demo04?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//treeset的使用
? ? ? ?TreeSet<String>?ts?=?new?TreeSet<>();
? ? ? ?//添加元素
? ? ? ?ts.add("good");
? ? ? ?ts.add("bonjour");
? ? ? ?ts.add("hello");
? ? ? ?ts.add("hi");
? ? ? ?System.out.println("元素个数"?+?ts.size());
? ? ? ?System.out.println(ts.toString());
?
? ? ? ?//添加重复元素
? ? ? ?ts.add("hi");
? ? ? ?System.out.println(ts.size());//失败
?
? ? ? ?//删除
? ? ? ?ts.remove("hi");
? ? ? ?System.out.println(ts.toString());
?
? ? ? ?//遍历
? ? ? ?for?(String?str?:?ts) {
? ? ? ? ? ?System.out.println(str);
? ? ? }
?
? ? ? ?Iterator<String>?it=ts.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
? }
}
?
/*
输出结果:
? ? ?元素个数4
? ? ?[bonjour, good, hello, hi]
? ? ?4
? ? ?[bonjour, good, hello]
? ? ?bonjour
? ? ?good
? ? ?hello
? ? ?bonjour
? ? ?good
? ? ?hello
*/
import?java.util.Iterator;
import?java.util.TreeSet;
?
public?class?Demo05?{
? ?public?static?void?main(String[]?args) {
? ? ? ?TreeSet<Person>?ts=new?TreeSet<>();
? ? ? ?Person?p1=new?Person("李沐阳",21);
? ? ? ?Person?p2=new?Person("王茜",23);
? ? ? ?Person?p3=new?Person("李鑫文",19);
? ? ? ?Person?p4=new?Person("大哥",20);
? ? ? ?Person?p5=new?Person("大哥",20);
?
? ? ? ?//添加
? ? ? ?ts.add(p1);
? ? ? ?ts.add(p2);
? ? ? ?ts.add(p3);
? ? ? ?ts.add(p4);
? ? ? ?System.out.println("人数"+ts.size());
? ? ? ?System.out.println(ts.toString());
?
? ? ? ?ts.remove(new?Person("大哥",20));
? ? ? ?System.out.println(ts.size());
?
? ? ? ?//遍历
? ? ? ?for(Person?per:ts){
? ? ? ? ? ?System.out.println(per);
? ? ? }
?
? ? ? ?Iterator<Person>?it=ts.iterator();
? ? ? ?while(it.hasNext()){
? ? ? ? ? ?System.out.println(it.next());
? ? ? }
? }
}
?
/*
输出结果:
? ? ?人数4
? ? ?[Student[name=大哥,age=20], Student[name=李沐阳,age=21], Student[name=李鑫文,age=19], Student[name=王茜,age=23]]
? ? ?3
? ? ?Student[name=李沐阳,age=21]
? ? ?Student[name=李鑫文,age=19]
? ? ?Student[name=王茜,age=23]
? ? ?Student[name=李沐阳,age=21]
? ? ?Student[name=李鑫文,age=19]
? ? ?Student[name=王茜,age=23]
*/

??:需要实现Comparable接口

因此在Person类中必须实现接口且重写CompareTo方法

@Override
? ?public?int?compareTo(Object?o) {
? ? ? ?Person?p=(Person)?o;
? ? ? ?int?n1=this.getName().compareTo(p.getName());
? ? ? ?int?n2=this.age-p.getAge();
?
? ? ? ?return?n1==0?n2:n1;
? }

3.Comparator接口

  • Comparale:可比较

  • Comparator:实现定制比较(比较器)

import?java.util.Comparator;
import?java.util.TreeSet;
?
public?class?Demo06?{
? ?public?static?void?main(String[]?args) {
? ? ? ?TreeSet<Person>?ts=new?TreeSet<>(new?Comparator<Person>() {
?
? ? ? ? ? ?@Override
? ? ? ? ? ?public?int?compare(Person?o1,?Person?o2) {
? ? ? ? ? ? ? ?int?n1=o1.getAge()-o2.getAge();
? ? ? ? ? ? ? ?int?n2=o1.getName().compareTo(o2.getName());
? ? ? ? ? ? ? ?return?n1==0?n2:n1;
? ? ? ? ? }
? ? ? });
? ? ? ?Person?p1=new?Person("李沐阳",21);
? ? ? ?Person?p2=new?Person("王茜",23);
? ? ? ?Person?p3=new?Person("李鑫文",19);
? ? ? ?Person?p4=new?Person("大哥",20);
? ? ? ?Person?p5=new?Person("大哥",20);
?
? ? ? ?ts.add(p1);
? ? ? ?ts.add(p2);
? ? ? ?ts.add(p3);
? ? ? ?ts.add(p4);
? ? ? ?ts.add(p5);
? ? ? ?System.out.println(ts.size());
? ? ? ?System.out.println(ts.toString());
? }
}
?
/*
输出结果:
? ? ?4
? ? ?[Student[name=李鑫文,age=19], Student[name=大哥,age=20], Student[name=李沐阳,age=21], Student[name=王茜,age=23]]
*/

案例(定制按长度比较)

import?java.util.Comparator;
import?java.util.TreeSet;
?
public?class?Demo07?{
? ?public?static?void?main(String[]?args) {
? ? ? ?TreeSet<String>?ts=new?TreeSet<>(new?Comparator<String>() {
? ? ? ? ? ?@Override
? ? ? ? ? ?public?int?compare(String?o1,?String?o2) {
? ? ? ? ? ? ? ?int?n1=o1.length()-o2.length();
? ? ? ? ? ? ? ?int?n2=o2.compareTo(o2);
? ? ? ? ? ? ? ?return?n1==0?n2:n1;
? ? ? ? ? }
? ? ? });
?
? ? ? ?ts.add("helloworld");
? ? ? ?ts.add("iphone");
? ? ? ?ts.add("beijing");
? ? ? ?ts.add("tomcat");
? ? ? ?ts.add("xian");
? ? ? ?ts.add("changsha");
? ? ? ?ts.add("wuxi");
?
? ? ? ?for(String?str:ts){
? ? ? ? ? ?System.out.println(str);
? ? ? }
?
? }
}
?
/*
输出结果:
? ? ?xian
? ? ?iphone
? ? ?beijing
? ? ?changsha
? ? ?helloworld
*/

Map接口与实现类

特点:

  • 用于存储任意键值对(Key-Value)

  • 键:无序、无下标、不允许重复(唯一)

  • 值:无序、无下标、允许重复

1.Map父接口

  • 特点:存储一对数据(Key- Value),无序、无下标、键不可以重复、值可以重复。

  • 方法:

    • V put(K key,V value)//将对象存入集合中,关联键值。key重复则覆盖原值。

    • Object get(Object key)//根据键获取对应的值。

    • Set<K>//返回所有key。

    • Collection<V> values()//返回包含所有值的Collection集合。

    • Set<Map.Entry<K.V>>//键值匹配的Set集合。

import?java.util.HashMap;
import?java.util.Map;
import?java.util.Set;
?
public?class?Demo01?{
? ?public?static?void?main(String[]?args) {
? ? ? ?Map<String,String>?map=new?HashMap<>();
? ? ? ?//添加元素
? ? ? ?map.put("cn","中国");
? ? ? ?map.put("uk","英国");
? ? ? ?map.put("usa","美国");
? ? ? ?System.out.println(map.size());
? ? ? ?System.out.println(map.toString());
? ? ? ?//删除元素
? ? ? ?map.remove("usa");
? ? ? ?System.out.println(map.size());
? ? ? ?//遍历元素
? ? ? ?//1:keySet()
? ? ? ?Set<String>?ks=map.keySet();
? ? ? ?for(String?str:ks){
? ? ? ? ? ?System.out.println(str+"="+map.get(str));
? ? ? }
?
? ? ? ?//2.使用entryset()
? ? ? ?Set<Map.Entry<String,String>>?mn=map.entrySet();
? ? ? ?for(Map.Entry<String,String>?entry:mn){
? ? ? ? ? ?System.out.println(entry.getKey()+entry.getValue());
? ? ? }
? }
}
?
/*
输出结果:
? ? ?3
? ? ?{usa=美国, uk=英国, cn=中国}
? ? ?2
? ? ?uk=英国
? ? ?cn=中国
? ? ?uk英国
? ? ?cn中国
*/

2.HashMap

  • JDK1.2版本,线程不安全,运行效率快,允许用null 作为key或者value。

  • Hashtable:JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value

package?jihe3;
?
import?java.util.HashMap;
import?java.util.Map;
?
HashMap的使用;存储结构:(数组+链表+红黑树)
public?class?Demo02?{
? ?public?static?void?main(String[]?args) {
? ? ? ?//创建集合
? ? ? ?HashMap<Student,String>?student=new?HashMap<>();
? ? ? ?//添加元素
? ? ? ?Student?s1=new?Student(100,"孙悟空");
? ? ? ?Student?s2=new?Student(1200,"沙悟净");
? ? ? ?Student?s3=new?Student(1300,"猪八戒");
? ? ? ?student.put(s1,"北京");
? ? ? ?student.put(s2,"上海");
? ? ? ?student.put(s3,"南京");
? ? ? ?student.put(s3,"广州");
? ? ? ?student.put(new?Student(1300,"猪八戒"),"广州");//重写hashcode和equals方法
? ? ? ?System.out.println("元素个数"+student.size());
? ? ? ?System.out.println(student.toString());
? ? ? ?//删除
? ? ? ?student.remove(s1);
? ? ? ?System.out.println("删除之后"+student.size());
? ? ? ?//3.1增强for遍历
? ? ? ?for(Student?stu:student.keySet()){
? ? ? ? ? ?System.out.println(stu.toString()+"========"+student.get(stu));
? ? ? }
? ? ? ?//3.2entrySet()
? ? ? ?for(Map.Entry<Student,String>?entry:student.entrySet()){
? ? ? ? ? ?System.out.println(entry.getKey()+"======="+entry.getValue());
? ? ? }
? ? ? ?//判断
? ? ? ?System.out.println(student.containsKey(s1));
? ? ? ?System.out.println(student.containsValue("南京"));
? }
}
?
/*
输出结果:
? ? ?元素个数3
? ? ?{Student{age=100, name='孙悟空'}=北京, Student{age=1300, name='猪八戒'}=广州, Student{age=1200, name='沙悟净'}=上海}
? ? ?删除之后2
? ? ?Student{age=1300, name='猪八戒'}========广州
? ? ?Student{age=1200, name='沙悟净'}========上海
? ? ?Student{age=1300, name='猪八戒'}=======广州
? ? ?Student{age=1200, name='沙悟净'}=======上海
? ? ?false
? ? ?false
*/

3.TreeMap

  • 实现了SortedMap接口(是Map的子接口),可以对key自动排序。

package?jihe3;
?
import?OOP.Demo17.Stu;
?
import?java.util.Map;
import?java.util.TreeMap;
?
public?class?Demo03?{
? ?public?static?void?main(String[]?args) {
? ? ? ?TreeMap<Student,String>?tm=new?TreeMap<>();
?
? ? ? ?Student?s1=new?Student(100,"孙悟空");
? ? ? ?Student?s2=new?Student(1200,"沙悟净");
? ? ? ?Student?s3=new?Student(1300,"猪八戒");
?
? ? ? ?tm.put(s1,"北京");
? ? ? ?tm.put(s2,"上海");
? ? ? ?tm.put(s3,"深圳");
? ? ? ?tm.put(new?Student(1300,"猪八戒"),"深圳");
?
? ? ? ?System.out.println(tm.size());
? ? ? ?System.out.println(tm.toString());
?
? ? ? ?for(Student?key:tm.keySet()){
? ? ? ? ? ?System.out.println(key+"========"+tm.get(key));
? ? ? }
?
? ? ? ?for?(Map.Entry<Student,String>?entry:tm.entrySet()){
? ? ? ? ? ?System.out.println(entry.getKey()+"======="+entry.getValue());
? ? ? }
? }
}
?
/*
输出结果:
3
? ? ?{Student{age=100, name='孙悟空'}=北京, Student{age=1200, name='沙悟净'}=上海, Student{age=1300, name='猪八戒'}=深圳}
? ? ?Student{age=100, name='孙悟空'}========北京
? ? ?Student{age=1200, name='沙悟净'}========上海
? ? ?Student{age=1300, name='猪八戒'}========深圳
? ? ?Student{age=100, name='孙悟空'}=======北京
? ? ?Student{age=1200, name='沙悟净'}=======上海
? ? ?Student{age=1300, name='猪八戒'}=======深圳
*/

4.Collections工具类

概念:集合工具类,定义了除了存取以外的集合常用方法

  • 方法:

    • public static void reverse(List<?> list)//反转集合中元素的顺序

    • public static void shuffle(List<?> list)//随机重置元素的顺序

    • public static void sort()List<?> list//升序排序(元素必须实现Comparable接口)

package?jihe3;
?
import?java.util.*;
?
public?class?Demo04?{
? ?public?static?void?main(String[]?args) {
? ? ? ?List<Integer>?list=new?ArrayList<>();
? ? ? ?list.add(20);
? ? ? ?list.add(30);
? ? ? ?list.add(40);
? ? ? ?list.add(50);
? ? ? ?list.add(60);
? ? ? ?//sort排序
? ? ? ?System.out.println("排序前"+list.toString());
? ? ? ?Collections.sort(list);
? ? ? ?System.out.println("排序后"+list.toString());
?
? ? ? ?//binarySearch查询
? ? ? ?int?i=Collections.binarySearch(list,50);
? ? ? ?System.out.println(i);
?
? ? ? ?//copy复制
? ? ? ?List<Integer>?list2=new?ArrayList<>();
? ? ? ?for?(int?j=0;j<list.size();j++){
? ? ? ? ? ?list2.add(0);
? ? ? }
? ? ? ?Collections.copy(list2,list);
? ? ? ?System.out.println(list2.toString());
?
? ? ? ?//reverse反转
? ? ? ?Collections.reverse(list);
? ? ? ?System.out.println("反转后"+list.toString());
?
? ? ? ?//shuffle打乱
? ? ? ?Collections.shuffle(list);
? ? ? ?System.out.println("打乱后"+list.toString());
?
? ? ? ?//补充,list转为数组
? ? ? ?Integer[]?arr=list.toArray(new?Integer[0]);
? ? ? ?System.out.println(arr.length);
? ? ? ?System.out.println(Arrays.toString(arr));
?
? ? ? ?//数组转为集合
? ? ? ?String[]?name={"张三","李四","王武"};
? ? ? ?List<String>?list3=Arrays.asList(name);//集合是一个受限集合,不能添加和删除
? ? ? ?//基本类型转集合时,要把它写成包装类
? ? ? ?System.out.println(list3.toString());
? }
}
?
/*
输出结果:
? ? ?排序前[20, 30, 40, 50, 60]
? ? ?排序后[20, 30, 40, 50, 60]
? ? ?3
? ? ?[20, 30, 40, 50, 60]
? ? ?反转后[60, 50, 40, 30, 20]
? ? ?打乱后[30, 40, 20, 50, 60]
? ? ?5
? ? ?[30, 40, 20, 50, 60]
? ? ?[张三, 李四, 王武]
*/

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:48:54  更:2021-12-04 13:49:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:41:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码