自动装箱与拆箱的使用
基本类型数据
和相对应的对象
之间互相自动转换的功能称为基本数据类型的自动装箱与拆箱
主要是针对基本数据类型
通过例子进行理解
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
1和2的对称差有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