​Java容器的继承关系​

news2024/12/24 13:07:35

Java容器的继承关系

Collection接口

 Collection接口中所定义的方法

int size();
boolean isEmpty();
void clear();
boolean contains(Object element);//是否包含某个对象
boolean add(Object element);
Iterator iterator();
boolean containsAll(Collection c);//是否包含另一个集合中的所有元素
boolean addAll(Collection c);
boolean removeAll(Collection c);
boolean retainAll(Collection c);求当前集合类和另一个集合类的交集
Object[] toArray();

复制

Collection 方法举例

import java.util.*;
public class Test{
    public static void main(String[] args){
        Collection c = new ArrayList();
        //可以放入不同类型的对象
        c.add("hello");
        c.add(new Integer(100));
        System.out.println(c.size());//2
        System.out.println(c);//[hello,100]
    }
}

复制

 这里提出一个我学习过程中问题:第四行代码,为什么不写成如下形式:

ArrayList c = new ArrayList();
//或者
List c = new ArrayList();

复制

 后来看了马士兵老师的视频以及网上找了一些博客解释才大概有个了解  首先,利用基类(父类)引用指向子类对象,该引用只能访问子类中父类的属性和方法,不能访问子类中新的属性和方法,当然这里不是父类,而是接口,效果也是一样的。这样做相当于给使用者固定一个模板,只能使用Collection中的一些方法,而且本身程序也只用到Collection中的方法,更加简洁  其次,使用Collection接口的引用更加具有扩展性,比方说下次要将c指向LinkedList对象,就可以直接改,但如果是上述两种方式,就不方便进行转换

Set接口

 Set接口中所定义的方法

boolean add(Object o)//如果不存在指定的元素,则添加此元素
boolean contains(Object o)//如果包含指定的元素,则返回true
boolean retainAll(Collection c)//保留包含collection中的元素
boolean addAll(Collection c)//将Collection中的元素添加到Set中(不包括重复的)

复制

Set方法举例

public static void main(String[] args){
    Set s = new HashSet();
    s.add("hello");
    s.add("world");
    s.add(new Inetger(100));
    s.add("hello");//相同的元素不会被添加
    System.out.println(s);//
}

复制

pulic static void main(String[] args){
    Set s1 = new HashSet();
    Set s2 = new HashSet();
    s1.add("a");s1.add("b");s1.add("c");
    s2.add("d");s2.add("a");s2.add("b");
    Set sn = new HashSet(s1);//把s1的内容copy到sn
    Set su = new HashSet(s1);
    sn.retainAll(s2);//两个集合的交集
    su.addAll(s2);
    System.out.println(sn);
    System.out.println(su);
}

复制

List接口

 List接口中所定义的方法

Object get(int index)//返回指定下标位置的元素
Object set(int index,Object element)//用指定的元素替换指定位置的元素,返回被替换的元素
void add(int index,Object element)//在指定位置添加元素,后面的元素依次向后移
Object remove(int index)//去除指定位置的元素
int indexOf(Object o)//返回元素第一次出现在List中的下标
int LastIndexOf(Object o)//返回元素最后一次出现在List中的下标

复制

List方法举例

public static void main(String[] args){
    List l1 = new LinkedList();
    for(int i = 0;i <= 5;i++)
        l1.add("a" + i);
    System.out.println(l1);//[a0,a1,a2,a3,a4,a5]
    l1.add(3,"a100");
    System.out.println(l1);//[a0,a1,a2,a100,a3,a4,a5]
    l1.set(6,"a200");
    System.out.println(l1);//[a0,a1,a2,a100,a3,a4,a200]
    System.out.print((String)l1.get(2) + " ");//a2
    System.out.println(l1.indexOf("a3"));//4
    l1.remove(1);
    System.out.println(l1);//[a0,a2,a100,a3,a4,a200]

复制

 上面程序注意一点是,get方法返回值是Object类型,所以要强制转换为String类型

Collections类

 类java.util.Collections提供了一些静态方法实现了基于List容器的一些常用算法

void sort(List)//对List容器内的元素排序
void shuffle(List)//对List容器内的元素随机排列
void reverse(List)//将List容器内的元素逆序
void fill(List,Object)//用一个特定的对象重新填充List
void copy(List dest,List src)//将src的内容拷贝到dest
int binarySearch(List,Object)//二分查找特定对象

复制

Collections方法举例

public static void main(String[] args){
    List l1 = new LinkedList();
    List l2 = new LinkedList();
    for(int i = 0;i <= 9;i++)
        l1.add("a" + i);
    System.out.println("l1");
    Collections.shuffle(l1);//随机排序
    System.out.println(l1);
    Collections.reverse(l1);//逆序
    System.out.println(l1);
    Collections.sort(l1);//排序
    System.out.println(l1);
    System.out.println(Collections.binarySearch(l1,"a5"));//折半查找
}

复制

Comparable接口

 Comparable中只有一个方法:

public int compareTo(Object obj);
//返回  0 表示this == obj
//返回正数表示this > obj
//返回负数表示this < obj

复制

 实现Comparable接口的类通过实现compareTo方法,从而确定该类对象的排序方式

Comparable方法举例

import java.util.*;

class Person implements Comparable{//必须实现接口
    String firstName,lastName;
    Person(String firstName,String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public String toString() {
        return firstName + "" + lastName;
    }
    public boolean equals(Object o) {
        if(o instanceof Person) {
            Person p = (Person)o;    
                return p.firstName == this.firstName && p.lastName == this.lastName;
        }
        return
                super.equals(o);
    }
    public int hashCode() {
        return firstName.hashCode();
    }
    public int compareTo(Object o) {//实现compareTo方法
        Person p = (Person)o;
        int perCmp = this.firstName.compareTo(p.firstName);
        //调用String类的compareTo方法
        return (perCmp == 0 ? this.lastName.compareTo(p.lastName) : perCmp);
        //如果姓相同,比较名
    }
}

public class Test{
    public static void main(String[] args) {
        List l1 = new LinkedList();
        l1.add(new Person("W","M"));
        l1.add(new Person("X","Z"));
        l1.add(new Person("Z","S"));
        l1.add(new Person("W","L"));
        System.out.println(l1);
        Collections.sort(l1);
        System.out.println(l1);
    }
}

复制

Map接口

  1. Map接口的实现类用来存储键&值对
  2. Map接口的实现类有HashMap和TreeMap等
  3. Map类中存储的键&值对通过键来标识,所以键值不能重复
Object put(Object Key,OBject Value)//如果原本的key存在,
//那么就会把原本的value作为返回值返回,并且把当前的参数传进去
Object get(Object Key)
Object remove(Object Key)
boolean containsKey(Object Key)
boolean containsValue(Object Value)
int size()
boolean isEmpty()
void putAll(Map t)
void clear()

复制

Map方法举例

import java.util.*;
public class Test{
    public static void main(String[] args){
        Map m1 = new HashMap();
        Map m2 = new HashMap();
        m1.put("one",new Integer(1));
        m1.put("two",new Integer(2));
        m1.put("three",new Integer(3));
        m2.put("A",new Integer(1));
        m2.put("B",new Integer(2));
        System.out.println(m1.size());
        System.out.println(m1.containsKey("one"));
        System.out.println(m2.containsValue(new Integer(1)));
        if(m1.containsKey("two")){
            int i = ((Integer)m1.get("two")).intValue();
            System.out.pritnln(i);
        }
        Map m3 = new HashMap(m1);
        m3.putAll(m2);
        System.out.println(m3);
    }
}

复制

import java.util.*;
//记录每个单词出现多少次
public class Test{
    private static final Integer ONE = new Integer(1);
    public static void main(String[] args) {
        Map m = new HashMap();
        for(int i = 0;i < args.length;i++) {
            Integer freq = (Integer)m.get(args[i]);
            m.put(args[i],(freq == null ? ONE : new Integer(freq.intValue()) + 1));
        }
        System.out.println(m.size() + "distinct words detected:");
        System.out.println(m);
    }
}

 

复制

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MybatisPlus 实现数据拦截

基于配置文件实现&#xff08;关键key存储在配置文件&#xff0c;通过读取配置文件来实现动态拼接sql&#xff09; 1、创建注解类 UserDataPermission(id"app") 注&#xff1a;id用以区分是小程序还是应用程序 注解加的位置&#xff1a; 2、配置枚举类配置文件 E…

学了Python后还用学R语言吗?

学习R语言是否有必要取决于你的具体需求和背景。虽然R语言和Python都是数据科学领域广泛使用的编程语言&#xff0c;但它们之间还是存在一些差异。 如果你主要从事数据分析、统计建模或者数据可视化等工作&#xff0c;那么学习R语言可能更为适合。R语言在数据处理和统计分析方…

【gcc, cmake, eigen, opencv,ubuntu】四.opencv安装和使用,获取opencv matiax 的指针

文章目录 ubuntu系统安装opencv1.下载opencv和opencv_contrib2.安装指导3.Linux 下 fatal error: opencv2/opencv.hpp: 没有那个文件或目录4.g 和cmake 编译使用opencv的程序5.opencv,eigen速度比较6.opencv常用类型符号7.获取opencv matiax 的指针 ubuntu系统安装opencv 1.下…

Java实训日志03

文章目录 八、项目开发实现步骤&#xff08;五&#xff09;创建数据库连接管理类1、创建数据库实用工具包2、创建数据库连接管理类&#xff08;1&#xff09;定义数据库连接属性常量&#xff08;2&#xff09;创建私有化构造方法&#xff08;3&#xff09;编写获取数据库连接静…

关于C++数组名和指针的一些思考

在学习指针数组与数组指针一节时&#xff0c;了解到数组名其实是指向数组收个元素的指针。如下面代码所示 int main() {int a[5] {1, 2, 3, 4, 5};cout << "*a:" << *a << endl;cout << "*(a 1):" << *(a 1) << e…

注解开发bean

注解开发定义bean 使用component定义bean Component("bookDao") public class BookDaoImpl implements BookDao{} 核心配置文件中通过组件扫描加载bean <context:component-scan base-package"com.tsj"/> Spring提供Component注解的三个衍生注解…

科研人必看 | 学术期刊论文作者署名新规

【SciencePub学术干货】在期刊上发表学术论文&#xff0c;是研究人员发布和传播学术研究成果的重要方式之一。学术期刊论文文献各项著录内容中&#xff0c;作者署名是最主要的组成部分之一。 随着经济的发展和社会的进步&#xff0c;人们面临的科学问题和社会问题日趋复杂&…

KaiwuDB 受邀亮相 IOTE 2023 第十九届国际物联网展

5月17日&#xff0c;IOTE 2023 第十九届国际物联网展在上海拉开序幕&#xff0c;全球超过 350 家参展企业到场展示先进的物联网技术和产品&#xff0c;行业专家、领军企业代表等人物齐聚一堂&#xff0c;共话 IoT 未来趋势。KaiwuDB 受邀亮相参展并就《工业物联网产业数字化转型…

基于SpringBoot+vue的网上图书商城系统设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

通用方案px2rem 处理 内联样式、element-ui表头折行、label折行、表单项换行异常

通用方案-处理element-ui 表单项label折行、换行异常&#xff0c;表头折行问题 背景简介&#xff1a;在实际的生产环境中&#xff0c;客户用到的屏幕大大小小分辨率各有异同&#xff0c;但是为了布局的统一和美观&#xff0c;我们采用了postcss-px2rem插件对element-ui进行响应…

仓库拣货标签——仓库16代

6432 全彩 LED 点阵显示屏 ​ 一、产品特性 采用2048 RGB LED全彩显示&#xff0c;亮度可调 无线通信 它可以显示文本、图片或动画 支持24V外置电源 支持系统对接&#xff0c;模板可DIY 二、PTL系统电子标签概述 电子标签拣选系统是利用先进的电子技术和通信技术开发的物…

选择合适的采购系统,实现企业数字化转型

随着数字化技术的飞速发展&#xff0c;企业数字化转型已经成为了当今市场的必然趋势。而采购系统作为企业数字化转型的重要组成部分&#xff0c;选择合适的采购系统对于企业来说至关重要。本文将围绕选择合适的采购系统&#xff0c;实现企业数字化转型展开讨论。 一、企业数字化…

数字门户的创新引擎:小程序容器

小程序容器技术的发展为数字门户带来了许多机会和优势。通过引入第三方生态&#xff0c;数字门户可以快速丰富自身的功能和服务&#xff0c;提高用户留存率&#xff0c;并打造一个开放的生态系统。这种创新的技术手段让数字门户能够更灵活地满足用户多样化的需求&#xff0c;提…

强化学习复现笔记(2)策略迭代

摘要&#xff1a; 上一节的压缩映射在实际迭代时可以分成两种方法&#xff0c;分别称作值迭代和策略迭代。本文用走迷宫的例子&#xff08;将1维迷宫扩展到2维&#xff09;讲这两种迭代。对应第一节参考链接[2]的前4章。 拆分压缩映射 上一节的压缩映射 v f ( v ) vf(v) vf(…

打造科学新高地|2023开放原子全球开源峰会科学智能分论坛圆满举行

6 月 11 日&#xff0c;以“AI 框架助力科学智能&#xff0c;打造科学新高地”为主题的 2023 开放原子全球开源峰会科学智能分论坛在北京圆满举行。北京航空航天大学计算机学院党委书记、教授李建欣参加并致辞&#xff1b;华为昇思 MindSpore 架构师倪宁曦、研究员徐旭升&#…

const用于C++引用(注意事项)

const用于C引用 存在的问题解决方法原理 存在的问题 左值是可以被引用的数据对象&#xff0c;可以通过地址访问它们&#xff0c;例如&#xff1a;变量、数组元素、结构体成员、引用和解引用的指针。 非左值包括字面常量&#xff08;用双引号包含的字符串除外&#xff09;和包含…

公司普通启动VR/AR软件开发虚拟场景游戏

随着元宇宙技术的不断革新&#xff0c;VR作为一种新兴技术&#xff0c;正在迅速普及。VR软件开发技术将用户沉浸到虚拟世界中&#xff0c;让人们可以身临其境地体验一些事物&#xff0c;如元宇宙游戏、商圈、展会、旅游等。而VR虚拟场景的开发&#xff0c;则是实现这一目标的重…

WRF进阶:使用ERA5-land数据驱动WRF/WRF撰写Vtable文件添加气象场

想用WRF模拟地气交换过程&#xff0c;对于WRF的地表数据&#xff0c;尤其是土壤温湿度数据要求便会很大&#xff0c;传统使用ERA5-singledata数据精度也许不足以满足需求&#xff0c;为此&#xff0c;本文尝试使用ERA5-land数据替换驱动WRF。 数据下载 ERA5-land的数据下载与…

2023 届 Java 岗高频面试题盘点,老司机也未必全会

2023&#xff0c;可谓是招聘面试最难季。不少大厂&#xff0c;如腾讯、字节的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言。今天不谈其它&#xff0c;就说说我作为面试官面试的那些事儿。 从某电商项…

【笔试强训选择题】Day25.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff…