一、Collection接口(超级接口:Iterator)

其下有两个子接口,Set和List。

1)Set接口的两个常用子类

TreeSet:有序存放

HashSet:散列存放

2)List接口(允许重复元素)

常用子类:LinkedList、ArrayList、Vector。ArrayList是List接口最常用的一个子类。LinkedList完成的是一个链表操作。

二、Map接口

实现子类:HashMap、HashTable、TreeMap等

TreeMap与TreeSet类似,TreeMap中元素根据key自动排序。

三、集合元素为自定义类时,集合的排序问题及

输出

自定义类作为集合元素时,集合本身不知道如何排序,必须类实现Comparable接口,并覆写compareTo()方法。

public class Person implements Comparable {

private String name;

private int age;

public Person(String name, int age) {

this.age = age;

this.name = name;

}

@Override

public int compareTo(Person o) {//按名字顺序排序

return this.name.compareTo(o.name);

}

@Override

public String toString() {

return this.name + ":" + this.age;

}

}

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

import java.util.ListIterator;

public class Test001 {

public static void main(String[] args) {

ArrayList person = new ArrayList();

person.add(new Person("何明", 20));

person.add(new Person("小米", 22));

person.add(new Person("Jane", 21));

person.add(new Person("Katty", 20));

person.add(new Person("Blue Key",20));

person.add(new Person("乔布斯",20));

Collections.sort(person); //排序

Iterator ite=person.iterator(); //Iterator迭代

while(ite.hasNext())

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

for(Person p:person) //foreach遍历

System.out.println(p);

System.out.println(person);

ListIterator lite= person.listIterator();//ListIterator迭代

while(lite.hasNext()) //从前往后遍历

while(lite.hasPrevious()) //从后向前比遍历,此操作需要从前往后遍历一趟

System.out.println(lite.previous());

}

}

//输出结果:

//[Blue Key:20, Jane:21, Katty:20, 乔布斯:20, 何明:20, 小米:22]

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class MapDemo {

public static void main(String[] args) {

Map map = new TreeMap<>(); //按key排序

map.put("诸葛亮", 3);

map.put("孙悟空", 5);

map.put("爱迪生", 8);

map.put("孔乙己", 11);

map.put("猪八戒", 7);

Set> tree = map.entrySet();

Iterator> ite = tree.iterator();

while(ite.hasNext()) {

Map.Entry e=ite.next();

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

}

for (Map.Entry entry : map.entrySet()) {

System.out.print(entry.getKey() + "-->" + entry.getValue()+" ");

//孔乙己-->11 孙悟空-->5 爱迪生-->8 猪八戒-->7 诸葛亮-->3

}

}

}

四、Map的实现子类中,当键为自定义类时,要想通过一个匿名对象找到值,则需要覆写equals()、hashCode()方法区分是否同一个对象。

//构造一个Person类

public class Person implements Comparable {

public Person(String name, int age) {

this.age = age;

this.name = name;

}

@Override

public int compareTo(Person o) {

return this.name.compareTo(o.name);

}

@Override

public String toString() {

return this.name + ":" + this.age;

}

@Override

public boolean equals(Object obj) {//覆写equals()方法

if (this == obj) {

return true;

} else if (!(obj instanceof Person)) {

return false;

}

Person p = (Person) obj;

if (this.name == p.name && this.age == p.age) {

return true;

} else {

return false;

}

}

@Override

public int hashCode(){ //覆写hashCode()方法

//公式:Person.hashcode=name.hashcode*age

return this.name.hashCode()*this.age;

}

private String name;

private int age;

}

//测试代码

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class MapDemo01 {

public static void main(String[] args) {

Map map = new TreeMap<>();

map.put(new Person("诸葛亮", 9), "zgl");

map.put(new Person("孙悟空", 5), "swk");

map.put(new Person("爱迪生", 8), "ads");

map.put(new Person("孔乙己", 11), "kyj");

map.put(new Person("猪八戒", 7), "zbj");

/*

* 通过一个Person类的匿名对象找到value值

* 需要覆写Person类的hashCode()方法与equals()方法

*/

System.out.println(map.get(new Person("诸葛亮", 9)));

//输出TreeMap

Set> tree = map.entrySet();

Iterator> ite = tree.iterator();

while (ite.hasNext()) {

Map.Entry e = ite.next();

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

}

//foreach输出

for (Map.Entry entry : map.entrySet()) {

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

}

}

}

五、总结

1、元素是否具有排序:只有树状的集合(比如TreeSet和TreeMap)才能对自定义的对象和自然元素进行排序,其他都没有排序。

2、元素的类型是否一致:只要具有排序的集合,里边元素的类型必须统一,而且不能为null值。(只有TreeSet和TreeMap里边的元素必须统一,其他集合都可以是任意的类型)

3、元素是否具有排重:只有Set和Map具有排重,List是没有排重的。

4、从数据是否安全:只有Vector和HashTable(Map的实现类)是线程安全的,其他都是不安全的。

cascade在java_【Java基础】集合相关推荐

  1. java基础—集合框架

    java基础-集合框架 JDK1.2开始引入了集合框架的概念,以弥补java中只有数组这种容器的单一问题,这些框架多数由接口构成,另外也包含了一些对于接口实现的类,其中这些接口的最上层接口为java. ...

  2. JAVA基础+集合+多线程+JVM

    1. Java 基础 1.1. 面向对象和面向过程的区别 面向过程性能比面向对象高. 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候 等一般采用面向过程开发.但是 ...

  3. (阿里offer)春招知识点总结1:java基础+集合+并发+jvm+ssm

    写在前面:大量总结不是系统的总结,而是作者本人根据自己情况总结的,许多我很清楚的地方就不在提及,大量源码也均未提及,尤其是框架的总结提及很浅.仅作为自己短期技术栈的一个总结,只作为参考,不是一定正确的 ...

  4. java基础集合操作工具类Collections简述(java集合四)

    对集合中的元素进行排序 Collections中的sort方法使用 public class ListDemo {public static void main(String[] args) {Lis ...

  5. java基础----集合操作---实例----List集合的初始化

    文章内容:最近使用LeapMotion进行软件开发时,使用到了java API---->List集合,使用过程中遇到了一些小bug,特写此博客记录相关心得. 程序编写背景:使用leapMotio ...

  6. Java基础---集合的概述---list、set、map、泛型、collections

    集合的概述 单列集合的体系: Collection 单列集合的顶层接口 List Collection的子接口,增加了一些特有的方法,有序 可以重复 有索引 ArrayList 底层采用的数组结构实现 ...

  7. Java基础-------集合框架

    一,集合简介 1.1 集合由来: 对象的存储:①数组(基本数据类型  & 引用数据类型)  ②集合(引用数据类型)     >数组存储数据的弊端:长度一旦初始化以后,就不可变:真正给数组 ...

  8. JAVA基础---集合(一)--集合框架概述

    为什么用集合如何合理用集合,以及如何实现的和他们的实现原理,如果搞清了对于之后学习其他知识和开发是很有大帮助性的. 什么是集合框架? 集合框架是表示和操作集合的统一体系结构.所有集合框架都包含以下内容 ...

  9. 【面试专栏】第三篇:Java基础:集合篇-List、Queue

    面试中问完基础基本上就是考集合,因为集合的使用在业务开发中经常使用,而且集合的数据结构也是算法的基础,所以你对集合的掌握深度可能决定你有没有接着面的资格 List & Queue 实现类 Li ...

  10. java基础 —— 集合、异常、反射、io流、多线程

    1.集合 (Collection) #mermaid-svg-Po6HS0iqu2RMZvt5 .label {font-family: 'trebuchet ms', verdana, arial; ...

最新文章

  1. 如何在本地安装tomcat、jdk并且配置tomcat环境变量(window7)
  2. JavaScript词法作用域的简单介绍
  3. 发展第三代AI:清华AI研究院基础理论研究中心成立,朱军任主任
  4. Spring ORM数据訪问——Hibernate
  5. 嵌入式软件工程师经典笔试题
  6. 微软中国发布“IE8浏览器性能解密”,为金山网盾辟谣
  7. 8种相似度度量方式的原理及实现【笔记自用】【1】
  8. wpf 用户自定义事件传参
  9. synchronized的一些记录
  10. 太原市中考计算机考试系统,太原中考报名系统
  11. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...
  12. 查看当前环境下内核导出了哪些符号
  13. 数字电路与微型计算机原理,电子科技大学1999年考研真题-微机原理与数字电路...
  14. Linux 系统中的超级权限的控制
  15. Python入门--文件的读写
  16. vba 快速切换sheet
  17. 计算机表格应用试卷,计算机应用基础Excel试题库.doc
  18. android的NDK安装及工程实例
  19. 会计学(第一课)笔记
  20. 为什么 128 KB 的魂斗罗可以塞下这么长的剧情?

热门文章

  1. 阶跃函数和冲击函数相关性质及傅立叶变换求取方法
  2. CentOS---网络配置详解
  3. 关于操作系统中进程、线程、死锁、同步、进程间通信(IPC)的超详细详解整理
  4. java汽车租赁系统_汽车租赁公司全网低价
  5. 科大星云诗社动态20201130
  6. 东华之旅vs第一次坐飞机经历2018-06-10
  7. A review of 3D/2D registration methods for image-guided interventions(1)
  8. Html中的各种高度宽度
  9. 在C语言中以编程的方式获取函数名
  10. 总结数据库设计中的14个技巧