博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
J2SE 容器
阅读量:5107 次
发布时间:2019-06-13

本文共 3506 字,大约阅读时间需要 11 分钟。

知识点:Collection接口、Iterator接口、增强的for循环、Set接口、List接口和Comparable接口、Collection类、Map接口、自动打包/解包、泛型

容器:API文档位于 java.util 包内

容器有这几种:数组、Set、Lish、Map

1、Collection 接口

  • 定义了一组存取对象的方法,存储方式有Set 和 List
    • Set 中的数据对象没有顺序且不可重复
    • List 中的对象有顺序且可以重复
  • Map 接口:定义了存储“键(key)--- 值(value)”映射对的方法

 

 

  • Collection 接口所定义的方法:

 

 

  • 容器类对象在调用remove、contains等方法时,需要比较两个对象是否equals,这会涉及到对象类型的equals方法和hashCode方法;
  • 对于自定义的类型,需要重写equals和hashCode方法,以实现自定义的对象相等规则
  • 当对象用在Map接口里头作为键(key)使用的时候,会使用hashCode方法(hashCode特别适合用作索引)
  • 重写equals方法,必须重写hashCode方法
  • 两个对象如果互相的equals,则他们两个必须具备相同的hashCode
//remove某个对象的时候,会从容器中挨个将对象取出来与这个对象作比较,如果有对象和这个对象equals,则remove成功import java.util.*;public class BasicContainer{    public static void main(String args[]){        Collection c = new HashSet();  //用哈希表实现的容器c(父类引用指向子类对象)                c.add("hello");        c.remove("hello");//remove成功                //Integer也重写了equals方法,所以只要值一样,这两个对象就就equals        c.add(new Integer(100));                c.remove(new Integer(100));//remove成功                c.add(new Name("f1","l1"));        Syetem.out.println(c.remove(new Name("f1","l1")));//返回“false”        //这两个Name对象并不equals,这个Name对象并没有重写equals的情况下,他们两个equals只有一个条件:指向同一对象                System.out.println(c);//    }}class Name{    private String firstName,lastName;    public Name(String firstName,String lastName){        this.firstName = firstName;        this.lastName = lastName;    }        //重写Name对象的equals和hashCode方法如下:    public boolean equals(Object obj){        if (obj instanceof Name){  //如果obj是一个Name对象            Name name = (Name) obj;  //将obj强制转换成一个Name对象            return (firstName.equals(name.firstName)) && (lastName.equals(name.lastName));//只有传进来的firstname和lastname都相等时才返回true        }        return super.equals(obj);//如果obj不是一个Name对象,交给父类处理,Name的父类为object。object的equals方法:比较当前对象和传进来的对象是不是同一对象    }    public int hashCode(){        return firstName.hashCode();    }}

 

2、Iterator接口

  • 所有实现了Collection接口的容器类都有一个iterator方法,用以返回一个实现了Iterator接口的对象
  • Iterator对象成为迭代器,用以方便的实现对容器内元素的遍历操作
  • Iterator接口就是一个统一用来遍历Collection元素的方法(无论对象是装在数组、链表、哈希表里,但是对于Iterator来说,都是一样的。Iterator就像一个游标,指在第一个元素的左边)
  •  

 

 

3、Set接口

Set接口是Collection的子接口,实现Set接口的容器类中的元素是没有顺序且不可以重复的,

Set类容器有HashSet和TreeSet

 

 

4、List 接口

 

5、Map 接口

 实现Map接口的类用来存储 “ 键---值 ” 对

Map接口的实现类有HashMap 和 TreeMap等

Map类中存储的键---值对通过键来标识,所以键值不能重复(互相不能equals,HashCode不能重复)

 

5、 Comparable接口

 

6、泛型

在定义集合的时候,同时定义集合中对象的类型

 

 练习:

import.java.util.*;public class TestArgsWords{    public static void main(args[]){        Map m = new HashMap();        for(int i = 0;i < args.length();i++){  //args是一个数组,循环args        //m.get(args[i])  以args[i]为key的那个value,如果没有则返回null            int number = (Integer) m.get(args[i]) == null ? 0 : (Integer) a.get(args[i]);//判断是否为空,如果为null就等于0,如果不为空就等于他本身            m.put(args[i],number==0 ? 1 : number + 1);//如果number为0(即m.get(args[i]) == null),则number=0;如果number为1,则为number加1        }        System.out.println(m.size());        Syetem.out.println(m);    }}

 

//泛型:(不需要强制转换)import.java.util.*;public class TestArgsWords{    public static void main(args[]){        Map
m = new HashMap
< args.length();i++){ //args是一个数组,循环args //m.get(args[i]) 以args[i]为key的那个value,如果没有则返回null int number = m.get(args[i]) == null ? 0 : a.get(args[i]);//判断是否为空,如果为null就等于0,如果不为空就等于他本身 m.put(args[i],number==0 ? 1 : number + 1);//如果number为0(即m.get(args[i]) == null),则number=0;如果number为1,则为number加1 } System.out.println(m.size()); Syetem.out.println(m); }}

 

 

 

 

转载于:https://www.cnblogs.com/luwanying/p/9737697.html

你可能感兴趣的文章
解决 Entity Framework 6.0 decimal 类型精度问题
查看>>
rabbitmq基础知识
查看>>
C#中Global文件
查看>>
深入理解DIP、IoC、DI以及IoC容器
查看>>
前端--jstree--异步加载数据
查看>>
什么是代理服务器
查看>>
通过一个模拟程序让你明白WCF大致的执行流程
查看>>
ASP.NET Core的配置(5):配置的同步[设计篇]
查看>>
只需 5 秒钟,你就能取到 WPF 程序的超高分辨率超高清截图
查看>>
架构设计之「数据库集群方案」
查看>>
WPF使用扩展屏幕
查看>>
LiveCharts文档-3开始-2基础
查看>>
C# 直接创建多个类和使用反射创建类的性能
查看>>
WPF 设置控件阴影后,引发的Y轴位置变化问题
查看>>
wpf采用Xps实现文档显示、套打功能
查看>>
通过 Visual Studio 的“代码度量值”来改进代码质量
查看>>
SqlServer 可更新订阅升级字段队列数据丢失原因
查看>>
解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
查看>>
asp.net学习之 数据绑定控件--List数据绑定控件
查看>>
三菱PLC FB库函数调用方法 (Gx Work2版本)
查看>>