集合框架(02)List
List的类型和特点:
ArrayList:底层的数据结构使用的是数组结构。特点:查询的速度很快,但是增删稍慢 线程不同步
LinKedList:底层使用的链表数据结构。特点:增删的速度很快,查询稍慢
Vector:底层是数组数据结构,线程同步,被ArrayList替代.特点:枚举是Vector特有的取出方式
枚举
.其实枚举和迭代是一样的,因为枚举的名称以及方法都过长,所以被迭代器取代了,枚举郁郁而终了
LinkedList:
LinkedList:特有的方法 addFirst(),addLast(), getFirst(), getLast(),. removeFirst(), removeLast()
removeFirst():移除并返回第一个元素,如果此列表为空则抛出NoSuchElementException异常
poolFirst():获取并移除此列表的第一个元素,如果此列表为空,则返回null,不抛异常
在JDK1.6出现了替代方法。
offerFirst() , offerLast() , peekFirst() ,peekLast() , pollFirst () , pollLast()
LinkedList方法代码:
package sxy.List; import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args){ LinkedList link1= new LinkedList();
link1.addFirst("apple1");
link1.addFirst("apple2");
link1.addFirst("apple3");
link1.addFirst("apple4"); sop(link1); //“遍历”
while(!link1.isEmpty()){
System.out.println(link1.removeFirst());
}
} public static void sop(Object obj){
System.out.println(obj);
} }
使用LinkedList模拟一个堆栈或者队列的数据结构。
堆栈:先进后出
队列:先进先出 First In First Out FIFO
典型例子(熟记):
package sxy.List; import java.util.LinkedList; class DuiLie{
private LinkedList link;
DuiLie(){
link = new LinkedList();
}
public void myAdd(Object obj){
link.addFirst(obj);
}
public Object myGet(){
return link.removeLast();
}
public boolean isNull(){
return link.isEmpty();
} }
public class LinkedListDemo2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DuiLie dl = new DuiLie();
dl.myAdd("apple1");
dl.myAdd("apple2");
dl.myAdd("apple3");
dl.myAdd("apple4"); while(!dl.isNull()){
System.out.println(dl.myGet());
} } }
去掉ArrayList的中重复的元素:
package sxy.List; import java.util.ArrayList;
import java.util.Iterator; public class TestArrayList { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub //去除ArrayList中的重复元素
ArrayList al = new ArrayList();
al.add("apple1");
al.add("apple2");
al.add("apple3");
al.add("apple3");
al.add("apple3");
al.add("apple4");
//打印原集合
sop(al);
//打印去重之后的集合
al = SingleElement(al);
sop(al); }
public static void sop(Object obj){
System.out.println(obj);
} public static ArrayList SingleElement(ArrayList al){
ArrayList al2 = new ArrayList();
Iterator it = al.iterator(); while(it.hasNext()){
Object obj = it.next();
if(!al2.contains(obj)){
al2.add(obj);
}
}
return al2;
} }
去除ArrayList中重复自定义对象:
将自定义对象作为元素存到ArrayList集合中,并除去重复元素
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素
思路:
- 对人描述,将数据封装进人对象
- 定义容器,将人存入。
- 取出 、
package CollectionTest; import java.util.ArrayList;
import java.util.Iterator; class Person{
private String name;
private int age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Person(String name,int age){
this.name=name;
this.age=age;
}
Person(){ } @Override
public boolean equals(Object obj) {//重写equals方法
Person per = (Person) obj;
if (per.getName().equals(this.name) && per.getAge() == this.age) {
return true;
}
return false;
}
} public class ArrayListDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Person> al = new ArrayList();
al.add(new Person("lisi1",10));
al.add(new Person("lisi2",20));
al.add(new Person("lisi2",20));
al.add(new Person("lisi3",30));
al.add(new Person("lisi4",40));
al.add(new Person("lisi4",40)); al=SingleElement(al);
Iterator it = al.iterator();
while(it.hasNext()){
//向下转型
Person p = (Person) it.next();
System.out.println(p.getName()+"::"+p.getAge());
} }
public static ArrayList SingleElement(ArrayList al){
ArrayList arrNew = new ArrayList();
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
//在调用contains方法的时候调用equals方法
if(!arrNew.contains(obj)){
arrNew.add(obj);
}
}
return arrNew;
} }
equals和contains方法的区别:
最近用到了equals和contains两个方法,两个都有对比的意思,但区别呢?在网上找了些资料,似乎大概能分清了。
首先是文档上的内容:
public boolean equals(Object ob指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
● 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
● 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
● 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回true。
● 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
● 对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
contains
public boolean contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
参数:
s - 要搜索的序列
返回:
如果此字符串包含 s,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 s 为 null
似乎有些难懂,尤其是equals的解释,下面是网友的解释内容:
equals是比较两个东西是否等同,这个适用于任何类别的对象
contains是是否包含的意思,那肯定.左边的对象是一个容器了
String现在也有一个contains,那是因为String是一个字符的容器
equals只能判断两个变量的值是否相等。
contains常用与集合中判断某个对象是否含有这个元素
l
List集合判断元素是否相同,依据的元素的equals方法
频繁的增删操作是LinkedList
Set:元素师无序的(存入和取出的顺序不一定一致),元素不可以重复
Set集合的功能和Collection是一致的
------HashSet:底层数据结构是哈希表
是如何保证元素的唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。如果元素的HashCode值相同,才会判断equals是否为true,如果元素的HashCode的值不相同,不会调用equals
------TreeSet:
集合框架(02)List的更多相关文章
- 阶段01Java基础day16集合框架02
16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...
- Java 集合框架 02
集合框架· LinkedList 和 泛型 去除ArrayList中重复字符串元素 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(相同内容的字符串) * 思路:创建新集合方式 ...
- java集合框架02
public class ListTest { public static void main(String[] args) { //创建几个新闻对象 News news1=new News(1, & ...
- java集合框架02——Collection架构与源码分析
Collection是一个接口,它主要的两个分支是List和Set.如下图所示: List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中 ...
- 20180826(02)-Java集合框架
Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组. 虽然这些类都非常有用 ...
- 十五、Java基础---------集合框架体系以及List
在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...
- Java的集合框架
01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...
- Java 集合系列 02 Collection架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- JavaSE_ 集合框架 总目录(15~18)
JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collectio ...
- JavaSE学习总结第15天_集合框架1
15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...
随机推荐
- heat应用
作为OpenStack中的编排引擎,Heat能够出色的完成编排任务,井井有条地管理编排出来的资源.但同时,Heat也是一个出色的应用部署引擎,它提供了一套内置的框架去完成一系列复杂的应用部署任务. 使 ...
- Elasticsearch相关度评分_score
相关度评分 _score 的目的 是为了将当前查询的结果进行排序,比较不同查询结果的相关度评分没有太大意义. _score的计算方式 score(q,d) = # score(q,d) 是文档 d 与 ...
- CentOS 6.3 下 vsftp搭建
环境:CentOS6.3 ftp的三种用户模式 匿名用户:vsftp默认开启匿名用户,但只允许下载不允许上传:匿名用户anonymous或ftp:匿名用户目录/var/ftp,但实际上vsftp对匿名 ...
- poj1273 网络流入门题 dinic算法解决,可作模板使用
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62078 Accepted: 2384 ...
- 【linxu】部署docker容器虚拟化平台
实验所涉内容 Docker 概述 部署 docker 容器虚拟化平台 docker 平台基本使用方法 创建docker镜像和发布镜像方法 Container 容器端口映射 一 Docker 概述 Do ...
- PHP字符串基本操作函数
常用函数: trim():去除字符串的空格及传入的参数 strlen():获取字符串长度 substr():按照两个参数截取字符串 str_replace():字符串替换 str_split():将字 ...
- poj 2253 Frogger (最短路径)
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22557 Accepted: 7339 Descript ...
- [CF1036C]Classy Numbers
题目大意:多个询问,每个询问问$[l,r](1\leqslant l\leqslant r\leqslant10^{18})$内有多少个数满足非零数位小于等于$3$. 题解:数位$DP$,$f_{i, ...
- [poj] 2074 Line of Sight || 直线相交求交点
原题 给出一个房子(线段)的端点坐标,和一条路的两端坐标,给出一些障碍物(线段)的两端坐标.问在路上能看到完整房子的最大连续长度是多长. 将障碍物按左端点坐标排序,然后用房子的右端与障碍物的左端连线, ...
- 常用sql语句 DML语句
1.select *|字段名 from 表名 [where 条件] [order by 排序 asc|desc] [limit 限制输出 startrow,pagesize] 查询 2.insert ...