深入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:不要 ...
随机推荐
- java中易错点(二)
java,exe是java虚拟机 javadoc.exe用来制作java文档 jdb.exe是java的调试器 javaprof,exe是剖析工具 解析一: sleep是线程类(Thread)的方法, ...
- Java 程序优化 (读书笔记)
--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能 ...
- Java列表
Java列表踩过的坑 其中subList是RandomAccessSubList,不是序列化的列表,不可以加入tair. 加入tair测试代码 @Autowired private CacheMana ...
- SQL-日期函数
GETDATE() :取得当前日期时间 DATEADD (datepart , number, date ),计算增加以后的日期.参数date为待计算的日期:参数number为增量:参数datepar ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- Jenkins的一个bug-同时build一个项目两次导致失败
我们有一个job A, A只是配置了一些参数,它会去触发模板job B. 我一开始点击构建A, 马上发现参数配置不对,于是撤消了构建,但是我没有发现B已经被触发,我重新配置参数,然后再次构建A,这个时 ...
- MemoryMappedFile 在 Mono in Linux 的开发笔记
前言 MemoryMappedFile(简称MMF)类是.NET中对内存映射文件进行操作的类,内存映射文件是非常高效的本地IO方案,由操作系统提供内存与IO文件之间的映射转换,对内存映射文件的更改由操 ...
- 我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录
一.缘起 在自己给别家公司做兼职外包的时候,已经明确知道外包的活不是那么好干的,一般在经历了初期热血澎湃的激情后,逐渐冷淡,愤怒,再冷淡,再愤怒…,听上去好像高潮迭起,但令人尴尬的是,这高潮迭起我们都 ...
- [译] 在Web API 2 中实现带JSON的Patch请求
原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用 ...
- 如何开发一个简单的HTML5 Canvas 小游戏
原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...