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. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...

  2. GAME PROGRAMM

    SetConsoleTextAttribute consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); GetStdHandle(nStdHandle)//是返回 ...

  3. es6函数的新语法

    函数的默认值 function(x,y=10){ //赋予了y就有了默认值为10,如果y赋值了,就回被覆盖,否则就是默认值10 变量已经有默认值了,所以不用再次用let或者const声明啦 }

  4. jquery页面隐藏和展开之间切换

    html页面: <p id="myp4">默认情况下,这段话是隐藏的,点击按钮以后,这段话就展开,并且按钮上的值改变</p> <button id=& ...

  5. Jersey RESTful WebService框架学习(二)使用@PathParam

    @PathParamuri路径参数写在方法的参数中,获得请求路径参数.比如:@PathParam("username") String userName 前端请求: <!DO ...

  6. IE上如何设置input type=file的光标不闪烁

    我们使用文件上传时,时常自定义图标,这时候通常会把input的透明度设置为0,但是在IE上使用时会出现光标闪烁问题 解决办法 css设置font-size为0

  7. ckeditor 实现ctrl+v粘贴图片并上传、word粘贴带图片

    公司做的项目需要用到文本上传功能. Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我总不能一张一张复制吧? 我希望打开文档doc直接复制粘贴到富文本 ...

  8. command not found Operation not permitted

    mysql -uroot -p  报错误:command not found 因为苹果在OS X 10.11中引入的SIP特性使得即使加了sudo(也就是具有root权限)也无法修改系统级的目录,其中 ...

  9. 【python】鼠标操作

    [python]鼠标操作 推荐地址:http://www.cnblogs.com/fnng/p/3288444.html --------------------------------------- ...

  10. mysql_变量

    set names gbk; 变量 变量分为两种:系统变量,自定义变量 系统变量:系统定义好的,大部分情况用户不需要使用系统变量,如autocommit,auto_increment_incremen ...