------- android培训、java培训、期待与您交流! ----------
15.01 02
Set:无序,不可以重复元素
--HashSet:数据结构是哈希表,线程是非同步的
保证元素唯一性的原理,判断元素的hashCode值是否相同
如果相同,还会继续判断元素的equals方法,是否为true
--TreeSet:可以对Set集合中的元素进行排序
底层数据结构是二叉树
1,保证元素唯一性的依据compareTo方法return 0 。
2,当元素不具备比较性时,或者具备的比较性不是所需要的
这时就需要让集合自身具备比较性
在集合初始化时,就有了比较方式
需求;
往TreeSet集合中存储自定义对象学生
想按照学生的年龄进行排序
记住:排序时,当主要条件相同时,一定判断次要条件
*/
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi08",19));
Iterator it = ts.iterator();
while (it.hasNext())
{
Student stu = (Student)it.next();
System.out.println(stu.getName()+"::"+stu.getAge());
}
}
}
class Student implements Comparable//该接口强制让学生具备比较性
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if (!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student)obj;
System.out.println(this.name+"::compare to::"+s.name);
if (this.age > s.age)
return 1;
if(this.age == s.age)
{
return this.name.compareTo(s.name);
};
return -1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
15.04集合框架 实现Comparator方式排序
import java.util.*;
/*
当元素自身不具备比较性,或者具备的比较性不是所需要的
这时需要让容器自身具备比较性
定义了比较器,将比较器做为参数传递给TreeSet集合的构造函数
当两种顺序都存在时,以比较器为主
定义一个类,实现Comparator接口,覆盖compare方法
*/
class TreeSetDemo2
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new MyCompare());
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi08",19));
ts.add(new Student("lisi007",21));
Iterator it = ts.iterator();
while (it.hasNext())
{
Student stu = (Student)it.next();
System.out.println(stu.getName()+"::"+stu.getAge());
}
}
}
class Student implements Comparable//该接口强制让学生具备比较性
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if (!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student)obj;
System.out.println(this.name+"::compare to::"+s.name);
if (this.age > s.age)
return 1;
if(this.age == s.age)
{
return this.name.compareTo(s.name);
};
return -1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class MyCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if (num == 0)
{
if (s1.getAge() > s2.getAge())
return 1;
if (s1.getAge() == s2.getAge())
return 0;
return -1;
}
return num;
}
}
1506 集合框架 泛型概述
集合定义时候指定要存放的数据类型
泛型在集合框架中很常见
import java.util.*;
/*
泛型:JDK1.5版本以后出现新特性,用于解决安全问题,是一个类型2012-10-21安全机制
好处:
1。将运行时期出现问题ClasscastException转移到了编译时期,提高安全性
2.避免了强制转换
*/
class GenericDemo
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();//定义的时候就定义集合类型,用尖括号
al.add("abc001");
al.add("abc088");
al.add("abcd1");
//al.add(4);//这个添加暴露了安全问题,类型转换异常
Iterator<String> it = al.iterator();
while (it.hasNext())
{
String s = it.next();
System.out.println(s+":"+s.length());
}
}
}
1507 泛型使用
import java.util.*;
class GenericDemo2
{
public static void main(String[] args)
{
TreeSet<String> ts = new TreeSet<String>(new LenComparator());//传入比较器对象
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("hahaha");
Iterator<String> it = ts.iterator();
while (it.hasNext())
{
String s = it.next();
System.out.println(s);
}
}
}
class LenComparator implements Comparator<String>//按长度排序
{
public int compare(String o1,String o2)
{
int num = new Integer(o2.length()).compareTo(new Integer(o1.length()));
if(num == 0)
return o2.compareTo(o1);
return num;
}
}
1508 集合框架-- 泛型类
class Worker
{
}
class Student
{
}
/*
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展
现在定义泛型来完成扩展
*/
class Utils<QQ>//泛型类 该类操作的是对象,所以可以加泛型
{
private QQ q;
public void setObject(QQ q)
{
this.q = q;
}
public QQ getObject()
{
return q;
}
}
class GenericDemo3
{
public static void main(String[] args)
{
Utils<Worker> u = new Utils<Worker>();
u.setObject(new Worker()); new Student() 就编译错误 让错误发生在了编译阶段
Worker w = u.getObject();//不用强制转换了
}
}
class GenericDemo3
{
public static void main(String[] args)
{
Utils u = new Utils();
u.setObject(new Worker());
Worker w =(Worker) u.getObject();//强制转换
}
}
1509 集合框架--泛型方法
import java.util.*;
/*
class Demo<T>
{
public void show(T t)
{
System.out.println("show:"+t);
}
public void print(T t)
{
System.out.println("print:"+t);
}
}
/*
/*
泛型类定义的泛型,在整个类中有效,如果被方法使用
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型都已经固定了;
为了让不同方法可以操作不同类型,而且类型还不确定
可以将泛型定义在方法上
特殊之处:
静态方法不可以访问类上定义的泛型
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上
位置:
泛型放在返回值前面,修饰符后面
*/
class Demo<T> //T建立对象时候才明确,所以类中的静态方法不可以访问类上定义的泛型
{
public void show(T t)
{
System.out.println("show:"+t);
}
public <QQ> void print(QQ q)
{
System.out.println("print:"+q);
}
public static <W> void method(W t)
{
System.out.println("method:"+t);
}
}
class GenericDemo4
{
public static void main(String[] args)
{
Demo<String> d = new Demo<String>();
d.show("haha");
d.print("zzz");
d.method("new method");
/*Demo<Integer> d = new Demo<Integer>();
d.show(new Integer(4));
d.print(4);
Demo<String> d1 = new Demo<String>();
d1.print("haha");
d1.show("a");*/
}
}
1511 泛型接口
//泛型定义在接口上
interface Inter<T>
{
void show(T t);
}
/*
class InterImpl implements Inter<String>
{
public void show(String t)
{
System.out.println("show:"+t);
}
}
*/
class InterImpl <T> implements Inter<T>
{
public void show(T t)
{
System.out.println("show:"+t);
}
}
class GenericDemo5
{
public static void main(String[] args)
{
InterImpl<Integer> i = new InterImpl<Integer>();
i.show(4);
}
}
1512泛型限定
import java.util.*;
/*
?通配符:也可以理解为占位符
泛型的限定:
? extends E:可以接收E类型或者E的子类型--》上限
? super E:可以接收E类型或者E的父类型--》下限限定
*/
class GenericDemo6
{
public static void main(String[] args)
{
ArrayList <Person> a1 = new ArrayList<Person>();
a1.add(new Person("abc1"));
a1.add(new Person("abc2"));
a1.add(new Person("abc3"));
ArrayList <Student> a11 = new ArrayList<Student>();
a11.add(new Student("--abc1"));
a11.add(new Student("--abc2"));
a11.add(new Student("--abc3"));
printColl(a1);
printColl(a11);
}
public static void printColl(ArrayList<? extends Person> a1)
{
Iterator <? extends Person> it = a1.iterator();
while (it.hasNext())
{
System.out.println(it.next().getName());//这时只能使用父类中的方法
}
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
class Student implements Comparable<Person>
{
public int compareTo(Person s)
(
this.getName();
)
}
class Comp implements Comparator<Person>//可以接收Student及其父类
{
public int compare (Person s1,Person s2)
{
return s1.getName().compareTo(s2.getName());
}
}
TreeSet<Student> ts = new TreeSet<Student>();
ts.add(new Student("abc1"));
ts.add(new Student("abc2"));
ts.add(new Student("abc3"));
1513泛型限定
import java.util.*;
class GenericDemo7
{
public static void main(String[] args)
{
TreeSet<Worker> ts = new TreeSet<Worker>(new Comp());
ts.add(new Worker("abc01"));
ts.add(new Worker("abc03"));
ts.add(new Worker("abc02"));
ts.add(new Worker("abc00"));
Iterator<Worker> it = ts.iterator();
while (it.hasNext())
{
System.out.println(it.next().getName());
}
}
}
class Comp implements Comparator<Person>
{
public int compare(Person s1,Person s2)
{
return s1.getName().compareTo(s2.getName());
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
class Worker extends Person
{
Worker(String name)
{
super(name);
}
}
相关推荐
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案
集合—黑马程序员Java学习笔记
Java集合例题、例题源码、PPT教学文档(黑马程序员详细版)
含面向对象,异常处理和常用类,线程技术,集合框架,IO操作,网络编程,文件操作,反射机制,
黑马程序员java培训就业班笔记:day16(集合框架基础总结)
。。。
观看黑马程序员Java零基础视频教学,从60P方法开始总结的知识集合,请使用Xmind打开,如果需要学习请配合视频打开:https://www.bilibili.com/video/BV17F411T7Ao
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
Javaweb程序设计任务教程课后习题及答案 黑马程序员【传智播客】 集合整理不易,如果文档有错误请见谅,此次整理只有1、2、3、4、5、6、8、9
WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。2005年8月,在第11届ACM SIGKDD国际会议上...
集合: 70 — 80 题 15 — 18 页 线程: 81 — 90 题 18 — 21 页 IO & Socket: 91 — 95 题 21 — 24 页 二、OOAD & UML: 96 — 101 题 24 — 25 页 三、XML: 102 — 105 题 26 — 29 页 四、SQL: 106 — 109 ...
Ⅲ.Collection集合和Map集合的设计和API使用,以及集合的嵌套 Ⅳ.lambda表达式遍历集合,以及比较器comparator()匿名内部类的使用 V.使用Stream流操纵集合 功能: ①日志框架搭建、系统角色设计 ②首页、登录、商家...
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc ...黑马程序员入学Java精华总结.pdf
给大家分享一篇我在学习java过程中...包含常见的面试题:JVM、Java集合、多线程并发、java基础、SSM框架原理、微服务、Netty和RPC、网络、日志、算法、数据结构、加密、分布式算法、机器学习、大数据等知识点,都是干货
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何...
在本套课程中,将会非常深入、非常详细、非常全面的解读HashMap以及...从底层的数据结构到底层源码分析以及怎样使用提高HashMap集合的效率问题等进行分析。如果掌握本套课程,那么再看其他javase的源码时会觉得很简单。
@学习路线根据黑马程序员学习路线改编 Part1: Java基础&Web基础 Java基础 面向对象思想 集合框架 IO流 多线程与并发 异常处理 网络编程 数据库 MySQL Oracle JDBC C3P0 Druid 前端技术 HTML CSS JavaScript jQuery ...
Java基础笔记分为 Java基础篇 和 Java加强篇 Java基础篇包括: 1. Java环境搭建、Java快速入门、IDEA开发工具 2. Java基础语法、类型转换、运算符、Scanner 3. 分支结构、循环结构、随机数 4. 数组详解、Debug工具...
黑马程序员,b站当之无愧的白嫖课程之王 马士兵老师,马老师的课什么都好就是对我来说太贵难度太大,我有时会蹭直播公开课,蹭书。感兴趣可以支持一下(腾讯课堂) 简要介绍 DesignPatterns 设计模式代码库 ...