Java自动装箱与拆箱的使用//集合HashSet//存储管理的基本概念

自动装箱与拆箱的使用

基本类型数据相对应的对象之间互相自动转换的功能称为基本数据类型的自动装箱与拆箱
主要是针对基本数据类型

通过例子进行理解

import java.util.ArrayList;

public class Example13_10 {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<Integer>();    //创建一个泛型数组列表对象
        for (int i = 0; i <= 10 ; i++) {
            arrayList.add(i);   //将i自动装箱后放到列表对象中
        }
        for (int i = arrayList.size()-1; i > 0 ; i--) { //对对象列表进行遍历
            int k = arrayList.get(i);   //将获取到的对象自动拆箱放到int中
            System.out.print(" " + k);
        }
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_13.Part_5.Example13_10
 10 9 8 7 6 5 4 3 2 1
进程已结束,退出代码 0

集合HashSet

HashSet泛型类在数据组织上类似于数学上的集合,可以进行"交",“并”,“差”,运算

HashSet泛型类

HashSet泛型类创建的对象称为集合

HashSet<String> set = new HashSet<String>();

常用方法

  • public boolean add(E o) //向集合添加参数指定的元素
  • public void clear() //清空集合
  • public boolean contains(Object o) //判断参数指定的数据是否属于集合
  • public boolean isEmpty() //判断集合是否为空
  • public bloolean remove(Object o) //集合删除指定的元素
  • public int size() //获取集合中元素的个数
  • Object[ ] toArray() //将集合元素放到数组中,并返回这个数组
  • boolean containsAll //判断当前集合是否包含指定集合的参数
  • public Object clone() //获取当前集合的一个克隆对象

同样地当需要遍历集合是可以采用迭代器进行遍历

例子

import java.util.HashSet;
import java.util.Iterator;

class Student {
    String name;
    double score;
    Student(String name,double score){
        this.name = name;
        this.score = score;
    }
}
public class Example13_11 {
    public static void main(String[] args) {
        HashSet<Student> group1 = new HashSet<Student>();
        HashSet<Student> group2 = new HashSet<Student>();
        Student st1 = new Student("小刚",58);
        Student st2 = new Student("小明",93);
        Student st3 = new Student("小红",76);
        group1.add(st1);
        group1.add(st2);
        group1.add(st3);
        group2.add(st2);
        group2.add(st3);
        if (group1.contains(st1)){  //如果组1包含学生1就输出
            System.out.println("group1有" + st1.name );
        }
        if (group1.containsAll(group2)){    //如果组1含有组2的元素就输出
            System.out.println("group1拥有group2");
        }
        System.out.println("group1的有" +group1.size() + "个学生");
        System.out.println("group2的有" +group2.size() + "个学生");
        Iterator<Student> iterator = group1.iterator(); //获取组1的迭代器
        System.out.println("group1:");
        while(iterator.hasNext()){
            Student student = (Student)iterator.next();
            System.out.println(student.name + student.score + "分");
        }
        System.out.println("group2:");
        iterator = group2.iterator();
        while(iterator.hasNext()){
            Student student = (Student)iterator.next();
            System.out.println(student.name + student.score + "分");
        }
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_13.Part_5.Example13_11
group1有小刚
group1拥有group2
group1的有3个学生
group2的有2个学生
group1:
小红76.0分
小刚58.0分
小明93.0分
group2:
小红76.0分
小明93.0分

进程已结束,退出代码 0

集合的交并差

  • boolean retainAll(HashSet set) //集合求交运算,使当前集合成为两个集合的交
  • boolean addAll(HashSet set) //集合求并运算,使当前集合成为两个集合的并
  • boolean removeAll(HashSet set) //集合求差运算,使当前集合成为两个集合的差

要注意的是参数指定集合必须与当前集合是同种类型的集合,否则上述方法返回false

求集合的对称差例子
在这里插入图片描述

import java.util.HashSet;
import java.util.Iterator;

public class Example13_12 {
    public static void main(String[] args) {
        HashSet<Integer> integerHashSet1 = new HashSet<Integer>();
        HashSet<Integer> integerHashSet2 = new HashSet<Integer>();
        for (int i = 0; i <=5 ; i++) {
            integerHashSet1.add(i);
        }
        integerHashSet2.add(1);
        integerHashSet2.add(3);
        integerHashSet2.add(5);
        integerHashSet2.add(7);
        integerHashSet2.add(9);
        integerHashSet1.removeAll(integerHashSet2); //做差运算
        HashSet<Integer> integerHashSet3 = (HashSet<Integer>)integerHashSet1.clone(); //克隆1
        integerHashSet2.removeAll(integerHashSet3);
        integerHashSet1.addAll(integerHashSet2);    //做并运算
        int number  = integerHashSet1.size();
        System.out.println("1和2的对称差有"+ number + "个元素" + "分别是");
        Iterator<?> iterator = integerHashSet1.iterator();
        while (iterator.hasNext()){
            System.out.print(" " + iterator.next());
        }
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_13.Part_5.Example13_12
12的对称差有8个元素分别是
 0 1 2 3 4 5 7 9
进程已结束,退出代码 0

泛型与集合框架小结

  • 使用“class名称<泛型列表>声明一个泛型类,当使用泛型类声明对象时,必须用具体 的类型(不能是基本数据类型)替换泛型列表中的泛型。
  • LinkedList<E>泛型类创建的对象(链表结构存储数链表是由若干个被称为结点 的对象组成的一种数据结构,每个结点含有一个数据以及一个结点的引用和下一个结点的 引用。
  • .Stack<E>泛型类创建一个堆栈对象,堆栈把第一个放人该堆栈的数据放在最底下,而 把后续放人的数据放在已有数据的上面,堆栈总是在顶端进行数据的输入/输出操作。
  • HashMap<K,V>泛型类创建散列映射,散列映射采用散列表结构存储数据,用于存储 键/值数据对,允许把任何数量的键/值数据对存储在一起。使用散列映射存储经常需要检索 的数据,可以减少检索的开销。
  • TreeSet<E>类创建树集,树集结点的排列和链表不同,不按添加的先后顺序排列,当 一个树集中的数据是实现ComParable接口类创建的对象时,结点将按对象的大小关系升序 排列。
  • 6.TreeMap<K,V>类创建树映射,树映射的结点存储“键/值”对,和树集不同的是,树映 射保证结点是按照结点中的“键”升序排列。

存储管理的基本概念

提高主存的利用率,对主存信息实现有效保护是存储器管理的主要任务

存储器结构

  • 虚拟地址 //它不是主存中的真实地址,又称为相对地址,程序地址,逻辑地址或虚拟地址
  • 地址空间 //程序中由符号名组成的空间称为地址空间
  • 存储空间 //逻辑地址空间是逻辑地址的集合,物理地址空间是物理地址的集合

地址重定向 //是指程序的逻辑地址被转换成主存的物理地址的过程

  • 静态地址重定位 //是指在程序装入主存是已经完成逻辑地址到物理地址的转换,在程序执行期间将不会再发生变化
  • 动态地址重定位 //是指在程序运行期间完成逻辑地址到物理地址的转换,优点是解决内存紧张的问题

存储管理的功能

  • 主存储器的分配和回收
  • 提高主存储器的利用率:减少碎片,允许多道程序动态共享主存
  • 存储保护:任务是确保每道程序都在自己的主存空间,互不干扰
  • 主存扩充:主存扩充的任务是从逻辑上扩充主存容量,使用户认为系统所拥有的主存空间远比其实际的主存空间(RAM)大得多

CET4P185

  • conceal
  • curriculum
  • limited
  • earthquake
  • impact
  • selection
  • enormous
  • shave
  • property
  • feature
  • visible
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值