深入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:不要 ...
随机推荐
- iOS UITableView 与 UITableViewController
很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- [AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展
健康模型扩展 第一部分已经介绍了AlwayOn健康模型的概述.现在是创建一个自己的PBM策略,然后设置为制定的归类.创建这些策略,创建之后修改一下配置,dashboard就会自动评估这些策略. 场景, ...
- test
http://img.ivsky.com/img/bizhi/pic/201009/07/fangaoyouhua-015.jpghttp://desk.fd.zol-img.com.cn/t_s16 ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群
前言: 前段时间自己参考网上的文章,梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案,其中有一个方案是使用ZooKeeper,加之在大数据处理中,ZooKeeper确实起 ...
- JAVA通信系列一:Java Socket技术总结
本文是学习java Socket整理的资料,供参考. 1 Socket通信原理 1.1 ISO七层模型 1.2 TCP/IP五层模型 应用层相当于OSI中的会话层,表示层, ...
- 如何利用 Visual Studio 自定义项目或工程模板
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...
- With(ReadPast)就不会被阻塞吗?
在生产环境中,会有很多使用ReadPast查询提示的场合,来避免正在被其它事务锁定的行对当前查询造成阻塞,而又不会获取到“脏数据”. 可是很多人都疑惑,为什么我使用了ReadPast仍然有时会被阻塞? ...
- 不使用Ajax,如何实现表单提交不刷新页面
不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...