Java学习笔记之---集合

(一)集合框架的体系结构

(二)List(列表)

(1)特性

1.List中的元素是有序并且可以重复的,成为序列

2.List可以精确的控制每个元素的插入位置,并且可以删除指定位置的元素

3.List的两个主要实现类是ArrayList和LinkedList

(2)Arraylist

1.ArrayList底层是由数组实现的

2.动态增长,以满足应用程序的需求

3.在列表尾部插入和删除非常有效

4.更适合查找和更新元素

5.元素允许为null

(3)List常用方法

1.add(E e)  向列表的尾部添加指定的元素(可选操作)

2.add(int index, E element)  在列表的指定位置插入指定元素(可选操作)。

3.clear()  从列表中移除所有元素(可选操作)。

4.contains(Object obj)  如果列表包含指定的元素,则返回 true

5.get(int index)  返回列表中指定位置的元素

6.hashCode()   返回列表的哈希码值

7.indexOf(Object obj)  返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。

8.isEmpty()   如果列表不包含元素,则返回 true

9.iterator()  返回按适当顺序在列表的元素上进行迭代的迭代器

10.remove(int index)  移除列表中指定位置的元素(可选操作)。

11.removeAll()  从列表中移除指定 collection 中包含的其所有元素(可选操作)。

12.set(int index, E element)   用指定元素替换列表中指定位置的元素(可选操作)。

13.size()  返回列表中的元素数。

14.equals(Object obj)   比较指定的对象与列表是否相等

(4)实例

public class Student {
private String sno;
private String name;
private String sex;
private int age; public Student(String sno, String name, String sex, int age) {
this.sno = sno;
this.name = name;
this.sex = sex;
this.age = age;
} public String getSno() {
return sno;
} public void setSno(String sno) {
this.sno = sno;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
import java.util.ArrayList;

public class StudentTest {

    public static void main(String[] args){

        //创建学生对象

        Student s1=new Student("19501","丽丽","女",18);

        Student s2=new Student("19512","张三","男",20);

        Student s3=new Student("19523","李四","男",19);

        //创建集合

        ArrayList li=new ArrayList();

        //向集合中添加对象

        li.add(s1);

        li.add(s2);

        li.add(s3);

        //显示集合中的对象

        System.out.println("*************集合中的所有对象************");

        for(int i=0;i<li.size();i++){

            System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName());

        }

        //删除集合中的某一个对象

        System.out.println("*************删除一个对象后************");

        li.remove(2);

        for(int i=0;i<li.size();i++){

            System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName());

        }

        //向索引值为1的位置添加一个对象

        System.out.println("*************添加一个对象后************");

        Student s4=new Student("19533","听听","女",17);

        li.add(1,s4);

        for(int i=0;i<li.size();i++){

            System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName());

        }

        System.out.println("*************修改一个对象后************");

        s2.setName("张张");

        li.set(2,s2);

        for(int i=0;i<li.size();i++){

            System.out.println(((Student)li.get(i)).getSno()+","+((Student)li.get(i)).getName());

        }

    }

}

运行结果:

*************集合中的所有对象************

19501,丽丽

19512,张三

19523,李四

*************删除一个对象后************

19501,丽丽

19512,张三

*************添加一个对象后************

19501,丽丽

19533,听听

19512,张三

*************修改一个对象后************

19501,丽丽

19533,听听

19512,张张

(三)Set

(1)特性

1.set是元素无序并且不可以重复的集合,成为集

(2)HashSet

1.HashSet是Set中的一个重要实现类,称为哈希集

2. HashSet中的元素无序并且不可以重复

3. HashSet中只允许一个元素为null

4.具有良好的存取和查找功能

(3)Set常用方法

1. add(E e)   如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。

2. clear()  移除此 set 中的所有元素(可选操作)。

3. contains(Object obj)  如果 set 包含指定的元素,则返回 true

4. equals(Object obj)  比较指定对象与此 set 的相等性。

5. isEmpty()  如果 set 不包含元素,则返回 true

6. hashCode()  返回 set 的哈希码值

7. iterator()  返回在此 set 中的元素上进行迭代的迭代器

8. remove(Object obj)   如果 set 中存在指定的元素,则将其移除(可选操作)。

9. size()  返回 set 中的元素数(其容量)。

(4)实例

import java.util.Objects;

public class Cat {

    private String name;

    private String species;

    private int month;

    public Cat(String name, String species, int month) {

        this.name = name;

        this.species = species;

        this.month = month;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getSpecies() {

        return species;

    }

    public void setSpecies(String species) {

        this.species = species;

    }

    public int getMonth() {

        return month;

    }

    public void setMonth(int month) {

        this.month = month;

    }

    @Override

    public String toString() {

        return "Cat{" +

                "name='" + name + '\'' +

                ", species='" + species + '\'' +

                ", month=" + month +

                '}';

    }

    @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        Cat cat = (Cat) o;

        return getMonth() == cat.getMonth() &&

                getName().equals(cat.getName()) &&

                getSpecies().equals(cat.getSpecies());

    }

    @Override

    public int hashCode() {

        return Objects.hash(getName(), getSpecies(), getMonth());

    }

}
import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

public class CatTest {

    public static void main(String[] args){

        //创建对象

        Cat lili=new Cat("lili","英国短毛猫",2);

        Cat coco=new Cat("coco","暹罗猫",5);

        Cat lulu=new Cat("lulu","布偶猫",8);

        //创建set集合,设置泛型,调用时不用强制类型转换,减少错误的产生

        Set<Cat> set=new HashSet<Cat>();

        set.add(lili);

        set.add(coco);

        set.add(lulu);

        //添加对象

        System.out.println("*********添加对象后的结果*********");

        Cat lisa=new Cat("lisa","折耳猫",3);

        set.add(lisa);

        //显示宠物猫信息,通过迭代器显示

        Iterator it=set.iterator();//将set中的信息存入迭代器中

        while(it.hasNext()){//通过hasNext()判断集合中是否还有下一个

            System.out.println(it.next());//自动调用toString方法

        }

        System.out.println("*********添加重复属性对象后的结果*********");

        //添加属性重复的对象,需要重写hashCode方法和equals方法

        Cat lili2=new Cat("lili","英国短毛猫",2);

        set.add(lili2);

        Iterator it1=set.iterator();//将set中的信息存入迭代器中

        while(it1.hasNext()){//通过hasNext()判断集合中是否还有下一个

            System.out.println(it1.next());//自动调用toString方法

        }

        //修改对象属性

        System.out.println("*********查找对象信息*********");

       //通过对象名查找

        boolean a=set.contains(lili);

        if(a){

            System.out.println("找到了");

        }else{

            System.out.println("没找到");

        }

        //通过属性查找

        Iterator it2=set.iterator();

       while(it2.hasNext()){

           Cat c=(Cat)it2.next();

           if(c.getName().equals("lili")){

               System.out.println("找到了");

               break;

           }

       }

       //删除对象信息

        //删除一个对象

        System.out.println("*********删除一个对象信息后的结果*********");

        set.remove(lili);

        Iterator it3=set.iterator();//将set中的信息存入迭代器中

        while(it3.hasNext()){//通过hasNext()判断集合中是否还有下一个

            System.out.println(it3.next());//自动调用toString方法

        }

        //删除多个对象信息

        System.out.println("*********删除多个对象信息后的结果*********");

        Set set1=new HashSet();

        for(Cat c:set){

            if(c.getMonth()<5){

                set1.add(c);

            }

        }

        set.removeAll(set1);

        Iterator it4=set.iterator();//将set中的信息存入迭代器中

        while(it4.hasNext()){//通过hasNext()判断集合中是否还有下一个

            System.out.println(it4.next());//自动调用toString方法

        }

        //删除全部对象信息

        System.out.println("*********删除全部对象信息后的结果*********");

        set.removeAll(set);

        if(set.isEmpty()){

            System.out.println("都找不到了");

        }

    }

}

运行结果:

*********添加对象后的结果*********

Cat{name='lisa', species='折耳猫', month=3}

Cat{name='lulu', species='布偶猫', month=8}

Cat{name='coco', species='暹罗猫', month=5}

Cat{name='lili', species='英国短毛猫', month=2}

*********添加重复属性对象后的结果*********

Cat{name='lisa', species='折耳猫', month=3}

Cat{name='lulu', species='布偶猫', month=8}

Cat{name='coco', species='暹罗猫', month=5}

Cat{name='lili', species='英国短毛猫', month=2}

*********查找对象信息*********

找到了

找到了

*********删除一个对象信息后的结果*********

Cat{name='lisa', species='折耳猫', month=3}

Cat{name='lulu', species='布偶猫', month=8}

Cat{name='coco', species='暹罗猫', month=5}

*********删除多个对象信息后的结果*********

Cat{name='lulu', species='布偶猫', month=8}

Cat{name='coco', species='暹罗猫', month=5}

*********删除全部对象信息后的结果*********

都找不到了

(四)Map

(1)特性

1.Map中的数据是以键值对(key-value)的形式存储的

2. key-value是以Entry类型的对象实例存在

3.可以通过key快速查找value

4.一个映射不能包含重复的键

5.每个键最多只能映射到一个值

(2)HashMap

1.基于哈希表的Map接口的实现

2.允许用null值和null键

3.key值不允许重复

4. HashMap中的Entry对象是无序排列的

(3)Map常用方法

1. clear()  从此映射中移除所有映射关系(可选操作)。

2. hashCode()  返回此映射的哈希码值

3. isEmpty()  如果此映射未包含键-值映射关系,则返回 true

4. remove(Object key)  如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

5. size()  返回此映射中的键-值映射关系数

6. equals(Object obj)  比较指定的对象与此映射是否相等

7.put(K key,V value)  将指定的值与此映射中的指定键关联(可选操作)。

8.values()  返回此映射中包含的值的 Collection 视图。

9.KeySet()  返回此映射中包含的键的 Set 视图。

10.entrySet()  返回此映射中包含的映射关系的 Set 视图

11.get(Object obj)  返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null

(4)实例

import java.util.*;

public class Animal {

    public static void main(String[] args){

        //创建一个集合

        Map<String,String> animal=new HashMap<String,String>();

        //创建键值对,将键值对存入集合

        for(int i=0;i<3;i++) {

            System.out.println("********请输入key和value******");

            Scanner sc = new Scanner(System.in);

            String key = sc.next();

            String value=sc.next();

            animal.put(key,value);

        }

        //使用迭代器打印出所有value的值

        System.out.println("********打印出所有value的值******");

        Iterator<String> it=animal.values().iterator();

        while(it.hasNext()){

            System.out.println(it.next());

        }

        //使用entrySet打印出所有的键值对

        System.out.println("********打印出所有的键值对******");

        Set<Map.Entry<String, String>> entryset=animal.entrySet();

        for(Map.Entry<String, String> s1:entryset){

            System.out.println(s1.getKey()+"-"+s1.getValue());

        }

        //通过key找到value,使用keySet方法

        System.out.println("********请输入key值******");

        Scanner s=new Scanner(System.in);

        String s2=s.next();

        Set<String> k=animal.keySet();

        for(String k1:k){

            if(s2.equals(k1)){

                System.out.println(s2+"对应的value值为:"+animal.get(k1));

                break;

            }

        }

        //删除一个键值对

        System.out.println("********打印出所有的键值对******");

        animal.remove("cat");

        Iterator<String> it1=animal.values().iterator();

        while(it1.hasNext()){

            System.out.println(it1.next());

        }

    }

}

运行结果:

********请输入key和value******

cat

********请输入key和value******

dog

********请输入key和value******

pig

********打印出所有value的值******

********打印出所有的键值对******

cat-猫

dog-狗

pig-猪

********请输入key值******

pig

pig对应的value值为:猪

********打印出所有的键值对******

Java学习笔记之---集合的更多相关文章

  1. Java学习笔记之集合

    集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...

  2. 【原】Java学习笔记026 - 集合

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...

  3. java学习笔记之集合家族2

    集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...

  4. 【Java学习笔记】集合转数组---toArray()

    package p2; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ...

  5. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  6. java学习笔记之集合家族1

    集合 集合介绍: 由于数组中存放对象,对对象操作起来不方便.java中有一类容器,专门用来存储对象. 集合与数组的区别: 1.数组的长度固定的,而集合长度时可变的 2.数组只能储存同一类型的元素,而且 ...

  7. 【原】Java学习笔记028 - 集合

    package cn.temptation; import java.util.HashSet; import java.util.Set; public class Sample01 { publi ...

  8. 5.3类集(java学习笔记)集合的输出

    一.集合的输出 迭代输出:Iteratror接口 在输出集合时,最标准的方法是使用迭代器迭代输出. 1,List中的迭代器. Iterator中包含三个方法: hasNex()t判断集合内是否有元素存 ...

  9. java学习笔记——Collection集合接口

    NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...

随机推荐

  1. WPF中的多进程(Threading)处理实例(二)

    原文:WPF中的多进程(Threading)处理实例(二) //错误的处理 private void cmdBreakRules_Click(object sender, RoutedEventArg ...

  2. Winform入门见解

    winform算是C#比较快速的入门的一个了,简单的控件拖拽然后写上每个控件对应的事件.然后就可以了.需要美观的点 可以用Skin皮肤就完成了.我们先不说复杂的,就来个普通的三层架构来增删改查 分页和 ...

  3. 【Linux】简单明了查看内存使用和ubuntu的版本号及位数

    1.查看ubuntu的版本号:cat /etc/issue 2.查看系统是32位的还是64位:getconf LONG_BIT 3.查看内存使用 free free命令可以用来查看系统内存使用情况,- ...

  4. 基于Go语言快速构建RESTful API服务

    In this post, we will not only cover how to use Go to create a RESTful JSON API, but we will also ta ...

  5. System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

    今天在写导入Excel表格的代码,运行时却报异常,异常信息: System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0 ...

  6. API HOOK介绍 【转】

    什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...

  7. delphi 程序强制结束自身(两种方法都暴力)

    procedure KillSelf;begin  Sleep(1000);  if not TerminateProcess(GetCurrentProcessId, 0) then  WinExe ...

  8. configure -help

    http://www.360doc.com/content/14/1215/17/18578054_433158382.shtml http://blog.csdn.net/mociml/articl ...

  9. GetParent、SetParent、MoveWindow - 获取、指定父窗口和移动窗口,IsChild - 判断两个窗口是不是父子关系

    提示: SetParent 应该 Windows.SetParent, 因为 TForm 的父类有同名方法. //声明: {获取父窗口句柄} GetParent(hWnd: HWND): HWND; ...

  10. Linux使用技巧:linux下将命令值赋给shell变量

    很多小伙伴在写shell脚本的时候需要把命令输出的值赋给一些变量,使得脚本在运行过程中能够顺利使用这些变量.例如:很多时候我们就需要获取当前目录的绝对路径,pwd这个命令大家在熟悉不过,可是要把这个命 ...