深入Collection集合
List集合
一.ArraryList:
最基本的集合不多做介绍
二.Vector
Vector cn=new Vector();
A:有特有功能
a:添加
public void addElement(E obj) -- add()
cn.addElement(object e);
b:获取
public E elementAt(int index) -- get()
cn.elementAt(int index) ;
public Enumeration<E> elements() -- iterator()
B:案例
a:Vector存储字符串并遍历
Vector cn=new Vector();
cn.addElement("a");
cn.addElement("b");
cn.addElement("s");
Iterator cnlist = cn.iterator();
while (cnlist.hasNext())
{
System.out.println(cnlist.next());
}
b:Vector存储自定义对象并遍历
//学生对象 重写toString
public class Student {
private String name;
private String age;
public Student(String name,String age)
{
this.name=name;
this.age=age;
}
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
//主类
Vector cn=new Vector();
//创建student对象
Student s=new Student("fan","15");
Student s1=new Student("fan1","15");
cn.addElement(s);
cn.addElement(s1);
//使用遍历器来进行遍历
Iterator cnlist = cn.iterator();
while (cnlist.hasNext())
{
System.out.println(cnlist.next().toString());
}
三:LinkedList
A:有特有功能
a:添加
addFirst()
addLast()
b:删除
removeFirst()
removeLast()
c:获取
getFirst()
getLast()
B:案例
a:LinkedList存储字符串并遍历
LinkedList ll=new LinkedList();
ll.addFirst("a");
ll.addFirst("b");
ll.addFirst("c");
ll.addLast("s");
Iterator iterator = ll.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
输出:
c
b
a
s
b:LinkedList存储自定义对象并遍历
Student s=new Student("sss","123");
Student s1=new Student("sss1","12");
Student s2=new Student("sss2","1");
LinkedList ll=new LinkedList();
ll.addFirst(s);
ll.addFirst(s1);
ll.addLast(s2);
Iterator iterator = ll.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toString());
}
输出:
Student [name=sss1, age=12]
Student [name=sss, age=123]
Student [name=sss2, age=1]
Set集合
Set集合的特点
无序,唯一
一.HashSet集合
A:底层数据结构是哈希表(是一个元素为链表的数组)
B:哈希表底层依赖两个方法:hashCode()和equals()
执行顺序:
比较哈希值是否相同
相同:继续执行equals()方法
返回true:元素重复了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合C:如何保证元素唯一性的呢?
由hashCode()和equals()保证的
D:开发的时候,代码非常的简单,自动生成即可。
a:HashSet存储字符串并遍历
b:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)
//student新增方法 实际开发自动生成
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
//主类
Student s=new Student("sss",1);
Student s1=new Student("sss",2);
Student s2=new Student("sss",3);
HashSet hs=new HashSet();
hs.add(s);
hs.add(s1);
hs.add(s2);
Iterator iterator = hs.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
输出:
Student [name=sss, age=1]
Student [name=sss, age=2]
Student [name=sss, age=3]
总结 :没有进行排序 无序 hashSet输出顺序不是按照插入顺序实现的 LinkedHashSet可以解决这个缺陷
(3)TreeSet集合
A:底层数据结构是红黑树(是一个自平衡的二叉树)
B:保证元素的排序方式
a:自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
b:比较器排序(集合具备比较性)
让集合构造方法接收Comparator的实现类对象
(4)案例:
A:获取无重复的随机数
TreeSet hs=new TreeSet();
Random rd=new Random();
for (int i = 0; i < 30; i++)
{
int s = rd.nextInt(10);
hs.add(s);
}
Iterator iterator = hs.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
B:学生按照年龄从高到底输出
1.让类实现Comparable接口
Student implements Comparable<Student>
2.实现接口
public int compareTo(Student s) {
int num = s.age-this.age;
int num2 = num == 0 ? this.name.compareTo(s.name) : num;
return num2;
}
3.主类
Student s1=new Student("sss1",1);
Student s2=new Student("sss2",6);
Student s3=new Student("sss3",2);
Student s4=new Student("sss4",9);
Student s5=new Student("sss5",8);
Student s6=new Student("sss6",7);
Student s7=new Student("sss7",3);
Student s8=new Student("sss8",5);
TreeSet<Student> hs=new TreeSet<Student>();
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4);
hs.add(s5);
hs.add(s6);
hs.add(s7);
hs.add(s8);
Iterator iterator = hs.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
输出结果:
Student [name=sss4, age=9]
Student [name=sss5, age=8]
Student [name=sss6, age=7]
Student [name=sss2, age=6]
Student [name=sss8, age=5]
Student [name=sss7, age=3]
Student [name=sss3, age=2]
Student [name=sss1, age=1]
注意:
一: 修改方法:
public int compareTo(Student s) {
return 1;
}
输出结果:
Student [name=sss1, age=1]
Student [name=sss2, age=6]
Student [name=sss3, age=2]
Student [name=sss4, age=9]
Student [name=sss5, age=8]
Student [name=sss6, age=7]
Student [name=sss7, age=3]
Student [name=sss8, age=5]
二: 修改方法:
public int compareTo(Student s) {
return 1;
}
输出结构:
Student [name=sss8, age=5]
Student [name=sss7, age=3]
Student [name=sss6, age=7]
Student [name=sss5, age=8]
Student [name=sss4, age=9]
Student [name=sss3, age=2]
Student [name=sss2, age=6]
Student [name=sss1, age=1]
深入Collection集合的更多相关文章
- 浅谈Collection集合
俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...
- Collection集合的功能及总结
Collection集合是集合顶层接口,不能实例化 功能 1.添加功能 boolean add(Object obj):添加一个元素 boolean addAll(Collection c):添加一个 ...
- JAVA collection集合之 扑克牌游戏
主要内容:这里使用collection集合,模拟香港电影中大佬们玩的扑克牌游戏. 1.游戏规则:两个玩家每人手中发两张牌,进行比较.比较每个玩家手中牌最大的点数,大小由A-2,点数大者获胜.如果点数相 ...
- Collection集合List、Set
Collection集合,用来保存一组数据的数据结构. Collection是一个接口,定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口:Li ...
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和 ...
- java.util.Map按照key值合并的value的Collection 集合中。
用java实现把多个map的内容合并的一个resultMap中 代码大致如下 /** * @author Shalf */ public class MapUtil { /** * 把partMa ...
- javad的Collection集合
集合框架:★★★★★,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合 ...
- Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历
1. Collection集合存储学生对象并遍历: 需求:存储自定义对象并遍历Student(name,age) 分析: (1)创建学生类 (2)创建集合对象 (3)创建学生对象 (4)把学生对象添加 ...
- Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历
1. Collection集合存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)把字符串对象添加到集合中 (4)遍历集合 2. 代码示例: package cn.itcast ...
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
1.Collection集合迭代器使用的问题探讨: (1)问题1:能用while循环写这个程序,我能不能用for循环呢? 可以使用for循环替代. (2)问题2:不要 ...
随机推荐
- TemplateMethod(模块方法模式)
/** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...
- BPM应用开发解决方案分享
一.需求分析企业整体管理是一个完整的体系,如果 把这个体系比做一个拼图,企业信息化通过各个业务系统覆盖了一部分业务. 企业通过采购实施通用软件的方式,覆盖了企业的核心业务和专业化业务然而系统只满足了部 ...
- Android中的flexboxlayout布局
提到FlexboxLayout大家估计有点模糊,它是谷歌最近开源的一个android排版库,它的前身Flexbox是2009年W3C提出了一种新的布局,可以简便.完整.响应式的实现页面布局,Flexb ...
- Form 表单提交参数
今天因为要额外提交参数数组性的参数给form传到后台而苦恼了半天,结果发现,只需要在form表单对应的字段html空间中定义name = 后台参数名 的属性就ok了. 后台本来是只有模型参数的,但是后 ...
- Git时间(第一次写,这个怎么玩啊)
1.安装 Liunx直接打开shell界面,输入:sudo apt-get install git-core ,按下回车之后输入密码即可完成安装: Windows系统在https://git-for- ...
- 微软收购Xamarin,你怎么看?
今天的最大新闻就是微软收购热门初创企业Xamarin,从网上的反馈大部分都是积极的,也有担心微软在把Xamarin移动开发技术整合进VS的同时,还很有可能废掉MONO的GUI客户端能力只保留.net ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ...
- 那些年黑了你的微软BUG
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 前言 炎炎夏日,朗朗乾坤,30℃ 的北京,你还在 Coding 吗? 整个 7 月都在忙项目,还加了 ...
- Spring集成MyBatis
本文原创,原文地址为http://www.cnblogs.com/fengzheng/p/5045105.html 如果觉得Hibernate不够灵活,可以尝试用Mybatis.相比于Hibernat ...
- windows7 下 apache2.4 和 php5.5 及 mysql5.6 的安装与配置
要准备的软件 httpd-2.4.9-win32-VC11.zip http://www.apachelounge.com/download/ php-5.5.13-Win32-VC11-x86.zi ...