Java从入门到精通09-集合

Java集合类主要有以下几种:

1、List结构的集合类
  ArrayList类,LinkedList类,Vector类,Stack类;

import java.util.ArrayList;

public class Test {
    public static void main(String args[]) {
        ClerkManage cm = new ClerkManage();
        Clerk clerk1 = new Clerk("01", "宋江", 40, 20000);
        Clerk clerk2 = new Clerk("02", "吴用", 38, 18000);
        Clerk clerk3 = new Clerk("03", "林冲", 42, 15000);
        cm.addClerk(clerk1);
        cm.addClerk(clerk2);
        cm.addClerk(clerk3);
        cm.showInfo("02");
        cm.updateSalary("01",25000);
        cm.removeClerk("03");
    }
}

class ClerkManage {
    private ArrayList al = null;

    public ClerkManage() {
        al = new ArrayList();
    }

    public void addClerk(Clerk clerk) {
        al.add(clerk);
    }

    public void showInfo(String no) {
        for (int i = 0; i < al.size(); i++) {
            Clerk clerk = (Clerk) al.get(i);
            if (clerk.getNo().equals(no)) {
                System.out.println("找到该员工信息!");
                System.out.println("姓名:" + clerk.getName());
                System.out.println("年龄:" + clerk.getAge());
                System.out.println("薪水:" + clerk.getSalary());
            }
        }
    }

    public void updateSalary(String no, float salary) {
        for (int i = 0; i < al.size(); i++) {
            Clerk clerk = (Clerk) al.get(i);
            if (clerk.getNo().equals(no)) {
                clerk.setSalary(salary);
            }
        }
    }

    public void removeClerk(String no) {
        for (int i = 0; i < al.size(); i++) {
            Clerk clerk = (Clerk) al.get(i);
            if (clerk.getNo().equals(no)) {
                al.remove(i);
            }
        }
    }
}

class Clerk {
    private String no;
    private String name;
    private int age;
    private float salary;

    public Clerk(String no, String name, int age, float salary) {
        this.no = no;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getSalary() {
        return salary;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }
}

ArrayList示例代码

  LinkedList、Vector、Stack与ArrayList大同小异,无键值概念;
  ArrayList与Vector都是java的集合类,都可以用来存放java对象,这是他们的相同点,他们的不同点如下:
  ①同步性,Vector是同步的,而ArrayList是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
  ②数据增长,当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

2、Map结构的集合类
  HashMap类,Hashtable类

public class Test {
    public static void main(String args[]) {
        HashMap hm = new HashMap();
        Clerk clerk1 = new Clerk("01", "宋江", 40, 20000);
        Clerk clerk2 = new Clerk("02", "吴用", 38, 18000);
        Clerk clerk3 = new Clerk("03", "林冲", 42, 15000);
        hm.put("01", clerk1);
        hm.put("02", clerk2);
        hm.put("03", clerk3);
        if (hm.containsKey("01")) {
            System.out.println("有该员工!");
            Clerk clerk = (Clerk) hm.get("01");
            System.out.println("姓名:" + clerk.getName());
            System.out.println("年龄:" + clerk.getAge());
            System.out.println("薪水:" + clerk.getSalary());
        } else {
            System.out.println("查无此人!");
        }
        //遍历HashMap中所有的key和value
        Iterator it = hm.keySet().iterator();
        while (it.hasNext()) {
            //取出key
            String key = it.next().toString();
            Clerk clerk = (Clerk) hm.get(key);
            System.out.println("姓名:" + clerk.getName());
            System.out.println("年龄:" + clerk.getAge());
            System.out.println("薪水:" + clerk.getSalary());
        }
    }
}

HashMap示例代码

  HashMap与Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别:
  ①Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个实现。
  ②Hashtable是同步的,这个类的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
  ③HashMap可以让你将空值作为一个表的条目的key或value,但是HashTable是不能放入空值的(null)

3、Set结构的集合类
  HashSet类,TreeSet类

4、Queue结构的集合
  Queue接口

总结:
1、如果要求线程安全,使用Vector,Hashtable;
2、如果不要求线程安全,应使用ArrayList,LinkedList,HashMap;
3、如果要求键值对,则使用HashMap,Hashtable;
4、如果数据量很大,又要线程安全考虑Vector;

时间: 2024-10-11 16:57:19

Java从入门到精通09-集合的相关文章

Java从入门到精通pdf电子版

Java从入门到精通pdf电子版 链接:https://pan.baidu.com/s/1nzy8LV6d2_qAD3oKS-Fj9Q 提取码:at3x 简介: <Java从入门到精通>从初学者小白角度出发,通过通俗易懂的白话语言.丰富多彩的实战实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术和技能,让你在编程开发中越走越远 目录 · · · · · · 第一篇 基础篇 第1章 Java概述 第2章 Java基本语言 第3章 控制流程语句 第4章 数组 第二篇 面向对象 第5章

《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路

以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门语言,但基本都只是了解了一个大概,入门肯定也算不上了.顶多也就能吹吹牛,说几个大的概念而已. 公司最近转型,决定抛弃PHP了,我们的出路是:要么H5,要么JAVA,要么走人.纠结了一段时间后,决定还是转JAVA了. 当一个人在自己熟悉的领域的时候,好像说什么都很有自信,都觉得自己是对的.那时候我们的

Android 学习资料入门到精通(PDF集合)共54本

最近收集一些安卓入门到精通,包含游戏编程,网络编程,多媒体开发,需要学习朋友就下载保持下来,下载链接在最下面 下面是网盘内容 14天学会安卓开发_(完整版).pdf Android 4  游戏高级编程  第2版.pdf Android 4.4 SDK Reference(2014.1.12 by YGX).chm Android 4高级编程(第3版)(完整书签).pdf Android(经典实例).pdf Android_2.0游戏开发实战宝典.pdf Android_开发从入门到精通_IBM.

《Java 从入门到精通(第二版)》 观书有感

笔者今天认真试读了下此书,首先,按照笔者看书的习惯来说,喜欢先看看前面的部分.作者在前言里放了张学习java的路线图,是一个比较标准的学习流程.可是为什么在编程进阶那里放了个设计模式,然后下次才是抽象类与接口,包及访问权限(这名字和java编程思想好熟悉啊),个人认为,设计模式不应该放上来的,可能作者这里的设计模式有其它的含义吧.         全书文字和图像布局都比较合理,看着也挺舒服的.并且发现书还不是一个人写的,不由好几个不同的人共同撰写的.接下来就是目录了,从目录的结构来看,知识点很全

《Java从入门到精通》第五章学习笔记

第5章 数组 一.一维数组 1.创建 一维数组实质上是一组相同类型数据的集合,在Java中数组不属于数据类型,而是一种对象. 数组的两种声明方式: int[] arr1;int arr2[]; 数组声明之后,在使用之前还需要先分配内存空间: arr1=new int[3];  //数组元素个数为3,即长度为3:arr2=new int[2]; 声明和分配空间也可以一并操作: int arr1[]=new int[3];int arr2[]=new int[2]; 元素赋值的两种方法: arr1[

《Java从入门到精通》第十章学习笔记

第10章 Java集合类 一.概述 Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用.常用的集合有List集合.Set集合.Map集合,其中List和Set实现了Collection接口. 二.集合类接口的常用方法 1.List接口的常用方法:因为继承了Collection接口,所以List接口也继承了Collection中的所有方法.List集合以线性有序的方式存储对象.List集合中可以包含重复的对象,的主要方法如下: (1

java基础入门-iterator迭代器与集合下标的使用

今天说说集合的iterator迭代器与集合下标的使用 先上代码 import java.util.ArrayList; import java.util.Iterator; public class Test { public Test() { // 初始化List addItemToList(); } private ArrayList<String> list = new ArrayList<String>(); private void addItemToList() { f

《Java从入门到精通》学习总结3

1. 3种构成重载的条件: 参数类型不同.参数个数不同.参数顺序不同 只有返回值类型不同并不足以区分两个方法的重载. 2. import关键字除了导入包之外,还可以导入静态成员,这是JDK 5.0以上版本提供的新功能.导入静态成员可以使程序员编程更加方便 package com.lzw; import static java.lang.Math.max; import static java.lang.System.out; public class ImportTest { public st

解读Java从入门到精通学习路线图

Java作为一种通用的编程语言可以做很多事情,但怎么学Java就看怎么用了,很多初学者想通过埋头苦学.马不停蹄的敲着代码记住Java基本原理,但一遇到困难便会让自己发狂,种种坎坷将自己打回原形. 为了排除大家的困惑,学习了精心准备Java学习路线图,建议你耐心的读完此篇,保你在学Java的道路上能事半功倍. 01Java基础知识 在学习Java之前要先了解计算机基础知识,然后再学习Java,同时也要熟知DOS常用命令.Java概述.JDK环境安装配置.环境变量配置,当JDK和环境变量配置完毕后,