1:List及其子类(掌握)

      (1)List的特点:

        Collection

       |--List:元素有序(存入顺序和取出顺序一致),可重复。

       |--Set:元素无序,唯一。

      (2)List的特有功能:

       A:添加功能

       add(int index,Object obj)

    B:删除功能

     remove(int index)

   C:获取功能

        get(int index)

    D:修改功能

        set(int index,Object obj)

   (3)案例:

       List存储字符串并遍历。

      List存储自定义对象并遍历。

注: 使用集合存储自定义对象的步骤:

      1)、定义要存储到集合当中的类

       2)、创建     集合<要存储到集合当中的类> 集合引用变量 = new 集合<要存储到集合当中的类>();

      3)、创建要存储到集合当中的类的对象们

       4)、调用集合方法,存储对应的对象

       5)、返回对应集合的迭代器

      6)、使用迭代器判断是否有下个元素

      7)、如果有下个元素则获取下个元素

   (4)List的三个子类的特点:

     List:

          |--ArrayList

            底层数据结构是数组,查询快,增删慢。

               线程不安全,效率高。

       |--Vector

     底层数据结构是数组,查询慢,增删慢。

线程安全,效率低。所以一般不用。

         |--LinkedList

       底层数据结构是链表,查询慢,增删快。

线程不安全,效率高。

     到底使用谁?

     是否需要安全:

         是:Vector(将来其实也不用这个,会有更好的方式,后面提)

       否:用ArrayList或者LinkedList

  如何查询多:ArrayList

  如果增删多:LinkedList

     如果你根本就不知道用谁?用ArrayList。

   (6)List的三个儿子的各自特有功能:(了解)

      A:ArrayList

     B:Vector

        JDK1.0时候的功能。但是后来被替代。所以不用掌握。

     C:LinkedList

    由于是链表,所以,操作开头和结尾比较简答。提高了添加,删除,获取开头或者结尾。

   (7)案例:

      Collection

         List

          ArrayList

         Vector

          LinkedList

        对上述集合分别存储字符串和自定义对象并遍历。

    (8)遍历:

        Collection:迭代器(所有集合都适用)

           |--List:普通for

           |--ArrayList

         |--Vector   返回Enumeration

           |--LinkedList

2:Set(掌握)

     (1)Set集合的特点:

     无序(存储和取出的顺序不一致),唯一。

      (2)HashSet

        如何保证元素的唯一性呢?

          底层数据结构是哈希表。哈希表依赖于哈希值。(集合中存储的对象所在的类的中hashCode()和equals()方法需要重写,才能保正元素的唯一性)

         最终依赖两个方法hashCode()和equals()。

     比较顺序:

     先比较hashCode()值:

   相同:

      继续走equals()方法,根据返回值:

      true:说明元素重复。不添加。

       false:说明元素不重复,添加。

    不同:就直接添加到集合。

        案例:

      HashSet存储字符串并遍历。(String类重写了hashCode()和equals())

      HashSet存储自定义对象并遍历。

         存储Person对象,然后去掉重复值。(标准代码)

      (3)TreeSet(理解)

    如何保证元素的唯一性?

     根据返回值是否是0。

      如何保证元素的排序?

        A:自然排序(元素具备比较性)

       让元素所属的类实现Comparable接口

         重写compareTo(T t)

     B:比较器排序(集合具备比较性)

        在创建集合对象的时候,传递Comparator接口的子类对象

        重写compare(T t,T t2)

       案例:

      TreeSet存储字符串并遍历。(String实现了Comparable接口)

         TreeSet存储自定义对象并遍历。

        (标准代码 看懂就行)

     存储学生对象,要求保证唯一和排序(先比较年龄,再比较姓名)。

     (4)LinkedHashSet:(理解)

     底层数据结构是哈希表和链表。

    由哈希表保证元素唯一。

     由链表保证元素有序。

3:增强for(掌握)

    (1)是针对数组和Collection集合进行遍历的一种方式。

      (2)格式:

        for(数组或者Collection集合中的元素的数据类型 变量名 : 数组或者Collection集合对象) {

      直接使用变量名即可,这个时候的变量名其实就是元素。

        }

  注意:

        A:增强for的底层封装了迭代器的操作。

    B:在使用增强for的时候,请保证迭代目标不为null。

     C:增强for循环只能做展示数据的功能,不能修改数据。

附题:分别用ArrayList,LinkedList,HashSet,LinkeHashSet,TreeSet存储字符串和自定义对象并遍历

import java.util.*;

public class SetTest {
//分别用ArrayList,LinkedList,HashSet,LinkeHashSet,TreeSet存储字符串和自定义对象并遍历。
public static void main(String[] args) { System.out.println("ArrayList存储字符串和自定义对象并遍历:");
// ArrayList存储字符串和自定义对象并遍历
//字符串遍历
ArrayList arrayList1 = new ArrayList(); String str1 = "2杨幂";
String str2 = "3柳岩";
String str3 = "1哈哈";
String str4 = "2杨幂"; arrayList1.add(str1);
arrayList1.add(str2);
arrayList1.add(str3);
arrayList1.add(str4); for (Object string : arrayList1) {
System.out.println((String) string);
}
//自定义对象遍历
ArrayList arrayList2 = new ArrayList(); Person p1 = new Person(29, "2杨幂");
Person p2 = new Person(27, "3柳岩");
Person p3 = new Person(30, "1哈哈");
Person p4 = new Person(29, "1杨幂"); arrayList2.add(p1);
arrayList2.add(p2);
arrayList2.add(p3);
arrayList2.add(p4); Iterator iterator = arrayList2.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
} System.out.println("-----------------------"); System.out.println("LinkedList存储字符串和自定义对象并遍历");
//LinkedList存储字符串和自定义对象并遍历
//字符串遍历
LinkedList linkedList1 = new LinkedList(); linkedList1.add(str1);
linkedList1.add(str2);
linkedList1.add(str3);
linkedList1.add(str4); for (Object string : linkedList1) {
System.out.println((String) string);
}
//自定义对象遍历
LinkedList linkedList2 = new LinkedList(); linkedList2.add(p1);
linkedList2.add(p2);
linkedList2.add(p3);
linkedList2.add(p4); Iterator iterator1 = linkedList2.iterator();
while (iterator1.hasNext()) {
System.out.println(iterator1.next());
} System.out.println("----------------------"); System.out.println("HashSet存储字符串和自定义对象并遍历");
//HashSet存储字符串和自定义对象并遍历
//字符串对象遍历
HashSet hashSet1 = new HashSet(); hashSet1.add(str1);
hashSet1.add(str2);
hashSet1.add(str3);
hashSet1.add(str4); for (Object string : hashSet1) {
System.out.println(string);
} //自定义对象并遍历
HashSet hashSet2 = new HashSet();
hashSet2.add(p1);
hashSet2.add(p2);
hashSet2.add(p3);
hashSet2.add(p4); for (Object person : hashSet2) {
System.out.println((Person) person);
} System.out.println("----------------------");
System.out.println("LinkeHashSet存储字符串和自定义对象并遍历");
//LinkeHashSet存储字符串和自定义对象并遍历 //字符串遍历
LinkedHashSet linkedHashSet1 = new LinkedHashSet(); linkedHashSet1.add(str1);
linkedHashSet1.add(str2);
linkedHashSet1.add(str3);
linkedHashSet1.add(str4); for (Object string : linkedHashSet1) {
System.out.println((String) string);
} //自定义对象并遍历
LinkedHashSet linkedHashSet2 = new LinkedHashSet(); linkedHashSet2.add(p1);
linkedHashSet2.add(p2);
linkedHashSet2.add(p3);
linkedHashSet2.add(p4); for (Object person : linkedHashSet2) {
System.out.println((Person) person);
} System.out.println("-----------------------");
System.out.println("TreeSet存储字符串和自定义对象并遍历");
//TreeSet存储字符串和自定义对象并遍历
//字符串遍历
TreeSet treeSet = new TreeSet(); treeSet.add(str1);
treeSet.add(str2);
treeSet.add(str3);
treeSet.add(str4); for (Object string : treeSet) {
System.out.println(string);
} //自定义对象并遍历
TreeSet treeSet2 = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Person p1=(Person)o1;
Person p2=(Person)o2;
int result=0;
result=p1.getAge()-p2.getAge();
if(result==0){
result=p1.getName().compareTo(p2.getName());
} return result;
}
}); treeSet2.add(p1);
treeSet2.add(p2);
treeSet2.add(p3);
treeSet2.add(p4); for (Object person : treeSet2) {
System.out.println((Person) person);
} }
}
public class Person implements Comparable {
//属性
int age;
String name; //构造器 public Person() { } public Person(String name){
this.name=name;
} public Person(int age, String name) {
this.age = age;
this.name = name;
} //方法
public int getAge(){
return age;
} public String getName(){
return name;
} public void setAge(int age) {
this.age = age;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false;
return name != null ? name.equals(person.name) : person.name == null; } @Override
public int hashCode() {
int result = age;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
} /*@Override
//先比较年龄,在比较姓名
public int compareTo(Object o) {
Person p=(Person) o;
int result=0;
result=this.age-p.age; if(result==0){
result=this.name.compareTo(p.getName());
} return result;
}*/ @Override
//先比较姓名,再比价年龄
public int compareTo(Object o) {
Person p=(Person) o;
int result=0;
result=this.name.compareTo(p.name); if(result==0){
result=this.age-p.age;
} return result;
}
}

集合框架_DAY16的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. 【目录】JUC集合框架目录

    JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...

  3. java面试题——集合框架

    先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...

  4. Java使用实现面向对象编程:第七章集合框架的解读=>重中之重

    对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. Java 之 集合框架(JCF)

    1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...

  8. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  9. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

随机推荐

  1. Win7 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  2. linux cp操作,每天学习一点

    指令名称:cp(copy)功能介绍:将一个文件复制至另一个文件,或将数个文件复制至另一目录. 语法格式: cp [options] source dest  cp [options] source.. ...

  3. python科学计算模块NumPy

    NumPy是Numerical Python的简称,是高性能科学计算和数据分析的基础包.其实NumPy 本身并并没有提供太多的高级的数据分析功能, 但是理解NumPy数组以及面向数组的计算将有利于你更 ...

  4. 19) maven 项目结构:聚集

    Project Aggregation [,æɡrɪ'ɡeɪʃən] https://maven.apache.org/guides/introduction/introduction-to-the- ...

  5. (转)ASP.NET MVC3 Razor视图引擎-基础语法

    转自:http://kb.cnblogs.com/page/96883/ I:ASP.NET MVC3在Visual Studio 2010中的变化 在VS2010中新建一个MVC3项目可以看出与以往 ...

  6. spring之IOC和DI实现

    Spring核心思想 : IOC控制反转 DI依赖注入 AOP切面编程 IOC思想: 场景描述: 在没有加入spring框架之前我们调取业务层时需要创建对象,例如:  接口名   变量名=new  接 ...

  7. 正确的类引用却显示* cannot be resolved

    eclipse 出现的问题:在一个类中引入自己编写的类竟然说“cannot be resolved”,这非常明显不正常的! 解决办法:很简单,project->clean.我的问题就解决了. 至 ...

  8. 在Echarts 柱形图的单击事件中写入自定义的参数

    标签: 逻辑:(点击柱形图的某个实例(注意:三个柱子表示的是一个实例)) 参考链接:http://echarts.baidu.com/doc/example/event.html { name: ‘c ...

  9. hdu 3915 高斯消元

    http://acm.hdu.edu.cn/showproblem.php?pid=3915 这道题目是和博弈论挂钩的高斯消元.本题涉及的博弈是nim博弈,结论是:当先手处于奇异局势时(几堆石子数相互 ...

  10. php excel

    项目中需要把excel转为索引数组,不输出key 只说下普世技巧 找了php excel插件 发现需要createReader方法,在sublime中search,可以搜索文件内容,找到使用creat ...