Java从零开始学二十二(集合Set接口)

一、Set接口的定义

Set接口也是Collection接口的子接口,但是与Collection或List接口不同的是,Set接口中不能加入重复的元素

  • Set接口的主要方法与Collection是一致的
  • Set接口的实例无法像List接口那样进行双向输出.不存在get方法使用Iterator接口来遍历集合

2个常用方法:hasNext方法表示判断是否还有元素可以迭代

next()方法:返回迭代的下一个元素

  • Set接口的常用子类

散列存放:HashSet

有序存放:TreeSet

二、使用SetHashSet

package com.pb.demo2;

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

import com.pb.demo2.Person;

public class PersonSetTest {

    public static void main(String[] args) {
        /*
         * 创建多个Person对象并赋值
         */
         Person p1 = new Person("张三",21);
         Person p2 = new Person("李四",22);
         Person p3 = new Person("王五",23);
         Person p4 = new Person("赵六",24);
         Person p5 = new Person("钱七",25);
         //创建Set接口对象HashSet
         Set<Person>pset=new HashSet<Person>();
         //通过add方法铺实现添加
         pset.add(p1);
         pset.add(p2);
         pset.add(p3);
         pset.add(p4);
         pset.add(p5);
         //获取长度
         System.out.println("长度为:  "+pset.size());
         System.out.println("===========使用Iterator来遍历===============");
         //因为没有get方法,使用Iterator来遍历
        Iterator<Person> piterator=pset.iterator();
        //使用next和hasNext方法来遍历
        while(piterator.hasNext()){
            Person p = piterator.next();
            System.out.println("姓名:  "+p.getName());
            System.out.println("年龄: "+p.getAge());
        }
        System.out.println("=========使用foreach来遍历=============");
         //使用foreach来遍历
        for (Person p : pset) {
            System.out.println("姓名:  "+p.getName());
            System.out.println("年龄: "+p.getAge());
        }
    }

}

三、验证散列的存放:HashSet

package com.pb.demo2;

import java.util.HashSet;
import java.util.Set;

public class HashSetTest {

    public static void main(String[] args) {
        Set<String> allSet = new HashSet<String>();
        allSet.add("A") ;                // 增加元素
        allSet.add("B") ;                // 增加元素
        allSet.add("C") ;                // 增加元素
        allSet.add("A") ;                // 重复元素,不能加入
        allSet.add("C") ;                // 重复元素,不能加入
        allSet.add("D") ;                // 增加元素
        allSet.add("E") ;                // 增加元素
        System.out.println("长度:"+allSet.size());
        System.out.println(allSet.toString()) ;        // 输出集合对象,调用toString()

    }

}

四、验证有序的存放:TreeSet

package com.pb.demo2;

import java.util.HashSet;
import java.util.Set;

public class HashSetTest {

    public static void main(String[] args) {
        Set<String> allSet = new HashSet<String>();
        allSet.add("A") ;                // 增加元素
        allSet.add("B") ;                // 增加元素
        allSet.add("C") ;                // 增加元素
        allSet.add("A") ;                // 重复元素,不能加入
        allSet.add("C") ;                // 重复元素,不能加入
        allSet.add("D") ;                // 增加元素
        allSet.add("E") ;                // 增加元素
        System.out.println("长度:"+allSet.size());
        System.out.println(allSet.toString()) ;        // 输出集合对象,调用toString()

    }

}
时间: 2024-12-24 15:16:18

Java从零开始学二十二(集合Set接口)的相关文章

Java从零开始学四十二(DOM解析XML)

一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <PhoneInfo name="手机品牌"> <Brand name="华为"> <Type name="U8650"> </Type> </Brand

Java从零开始学三十二(正则表达式)

一.为什么要有正则 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆份.替换功能. 例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法: 不使用正则完成 使用正则完成 二.Pattern.Matcher类 如果要想在程序中应用正则表达式则必须依靠Pattern类与Matcher类,这两个类都在java.util.regex包中定义.Pattern类的主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符串是否符合其规范. 常用正则规则 N

Java从零开始学四十(反射简述一)

一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方

从零开始学安全(十二)●建立自己的DNS服务器

我们的环境windows server 2012   虚拟机 打开服务器的添加角色和向导功能 添加DNF服务器安装 点击 在正向查找区域 反键新建区域 这里我一般输入一级域名 这是输入baidu.com  一直下一步默认 让后新建主机 这里我们输入 www     ip 地址就是dnf 在解析用户输入的域名后 要跳到的ip  我们的环境局域网  这里的ip 我填的我主机的ip  DNs服务器在收到www.baidu.com 请求时解析的ip就是我填写的ip 服务器配置完了 我要更改dns 服务器

Java从零开始学三十五(JAVA IO- 字节流)

一.字节流 FileOutputStream是OutputStream 的直接子类 FileInputStream也是InputStream的直接子类 二.文本文件的读写 2.1.字节输入流 Test.txt文件内容 abcdefg package com.pb.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExcept

Java从零开始学三十六(JAVA IO- 字符流)

一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的满时,再把缓冲区的内容写到字符输出流中 二.对文本文件的读写 2.1.字符输入流 2.2.字符输出流 2.3.综合使用 package com.pb.io.buffered; import java.io.BufferedReader; import java.io.BufferedWriter;

Java从零开始学三十八(JAVA IO- 重定向IO)

一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重定向方法 方法 说明 static void setErr(PrintStream errr) 重定向标准错误输出流 static void setIn(InputStream in ) 重定向标准输入流 static void setOut(PrintStream out) 重定向歀输出流 三.例

Java从零开始学三十(String和StringBuffer类)

一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作 二.StringBuffer类的常用方法 No. 方法定义 类型 描述 1 public StringBuffer() 构造 StringBuffer的构造方法 2 public StringBuffer append(char c) 方法 在StringBuffer中提供了大量的追加操作(与String中使用“

Java从零开始学四十五(Socket编程基础)

一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

Java从零开始学四十四(多线程)

一.进程与线程 1.1.进程 进程是应用程序的执行实例. 进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程 特征: 动态产生,动态消亡. 进程是并发性的. 进程独立性.是一个独立运行的基本单位,也是系统分配资源和调度的基本单位 1.2.线程 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位 线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程 特点: 线程依赖进程生存 一个进程