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第十章集合类 -> 正文阅读

[Java知识库]Java第十章集合类

集合类

课本P167
1.Collection、List、Set之间的联系和区别是什么?

Collection 是集合类的基本接口,用来说明一个集合类应有的结构特征属性和共性操作方法。它的直接继承接口有List和set。

List(有序可重复) 有三个常用的实现类ArrayList,LinkedList和Vector

ArrayList

  • 集合底层数据结构是数组。非线程安全。适合查询,不适合频繁的随机增删元素。
  • 默认初始化容量是10,扩大之后的容量是原容量的1.5倍。

LinkedList

  • LinkedList 的底层数据结构是双向链表,链表适合频繁的增删元素,不适合查询操作,不支持随机访问。

Vector

  • Vector集合底层是数组,线程安全。
  • 默认初始化容量是10,扩大之后的容量是原容量的2倍。

Set(无序不可重复)

常用的有两个实现类HashSet和LinkedHashSet

HashSet

  • 底层是由 Hash Map 实现,不允许集合中有重复的值,存储在HashSet集合或者HashMap集合部分的元素使用该方式时需要重写 equals()和hashCode()方法

LinkedHashSet

  • 继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap

2.遍历一个集合对象都有哪些方法?

3.同数组相比,Vector有何特点?

4.Vector与ArrayList、LinkedList与ArrayList、Hashtable与Hashmap、Treemap与Hashmap之间的共同点和区别是?

5.Map、Collection、Iterator之间的关系如何?

6.Collection和Collections各自的功能是什么?

7.现需要选择集合类,他存储的对象集合可以被多个线程维护(增加、删除),请问应该选择什么样的集合类,为什么?如果多个线程知识读取,而不维护,应该选择什么样的集合类,为什么?

8.如何实现集合对象排序?定义一个复数类并按照复数的实部大小对复数对象进行排序。

解法一:实现自身比较器Comparable

import java.util.*;
public class Complex implements Comparable<Complex>{
    private int real,imag;
    public Complex(){
        real=0;
        imag=0;
    }
    public Complex(int r,int i){
        real=r;
        imag=i;
    }
    @Override
    public int compareTo(Complex o){
        //TODO Auto-generated method stub 执行自动生成方法存根
        return this.real-o.real;
    }
    @Override
    public String toString(){
        if(imag>0)
            return real+"+"+imag+"i";
        else if(imag==0)
            return real+"";
        else return real+""+imag+"i";
    }
    public static void main(String[] args){
        List<Complex> list=new ArrayList<Complex>();
        list.add(new Complex(1,3));
        list.add(new Complex(-1,0));
        list.add(new Complex(10,-5));
        System.out.println(list);//排序前
        //用Collections类的静态方法排序
        Collections.sort(list);
        System.out.println(list);//排序后
    }
}

解法二:实现自定义比较器Comparator

import java.util.*;
public class Complex{
    private int real,imag;
    public Complex(){
        real=0;
        imag=0;
    }
    public Complex(int r,int i){
        real=r;
        imag=i;
    }
    @Override
    public String toString(){
        if(imag>0)
            return real+"+"+imag+"i";
        else if(imag==0)
            return real+"";
        else return real+""+imag+"i";
    }
    public static void main(String[] args){
        List<Complex> list=new ArrayList<Complex>();
        list.add(new Complex(1,3));
        list.add(new Complex(-1,0));
        list.add(new Complex(10,-5));
        System.out.println(list);//排序前
        //用Collections类的静态方法排序
        Collections.sort(list,new Comparator<Complex>(){
            public int compare(Complex o1,Complex o2){
                return o1.real<o2.real?-1:1;
            }
        });
        System.out.println(list);//排序后
    }

}

补充:随机生成5个复数排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Iterator;
public class Complex{
    int real;//实部
    int imag;//虚部
    public void print(Complex c){
        System.out.print(((Integer)c.real).toString()+"+"+((Integer)c.imag).toString()+"i ");
    }
    public Complex(int real, int imag){//构造方法
        this.real=real;
        this.imag=imag;
        print(this);//调用自身print方法
    }
    public static void main(String[] args){
        List<Complex> list=new ArrayList<Complex>();//建立一个泛型数组专门来存储Complex类
        System.out.println("排序前:");
        for(int i=0;i<5;++i){//随机生成5个复数
            int real=(int)(Math.random()*10);//随机生成1~10的整数
            int imag=(int)(Math.random()*10);
            list.add(new Complex(real,imag));//用real和imag构造一个Complex并且加入list中
        }
        System.out.println();
        System.out.println("排序后:");
        // 自定义集合元素比较器(匿名内部类)
        Collections.sort(list,new Comparator<Complex>(){
            public int compare(Complex a,Complex b) {
                return a.real-b.real;
            }
        });
        // Iterator遍历
        for(Iterator<Complex> it = list.iterator(); it.hasNext(); ) {
            Complex object=(Complex)it.next();
            object.print(object);
        }
    }
}

输出结果:

排序前:
6+1i 8+3i 2+1i 7+2i 8+7i 
排序后:
2+1i 6+1i 7+2i 8+3i 8+7i 

10.对第7章第6题进行适当改造,将异常类型与中文提示存储在一个集合类当中,从而实现相应的功能。

补充题目:
1.编写程序测试Java集合框架中各种常用类的基本操作(包括添加元素,删除元素,查找元素,遍历集合元素等)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:59:26  更:2021-11-25 08:01:14 
 
开发: 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/24 3:43:38-

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