集合框架(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 ...
随机推荐
- 孤荷凌寒自学python第七天 列表的复制与序列的基本运算
孤荷凌寒自学python第七天 列表的复制与序列的基本运算 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步语音:https://www.ximalaya.com/keji/191030 ...
- 稀疏矩阵相乘-Python版
稀疏矩阵相乘-Python版 Given two sparse matrices A and B, return the r ...
- KMP与循环节相关题目
HDU 3746 Cyclic Nacklace ( KMP求最小循环节 ) len - nextval[len]即为最小循环节长度. #include <cstdio> #include ...
- 软工实践 - 第十九次作业 Alpha 冲刺 (10/10)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10046955.htmlz 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 ...
- 使用Cookie保存用户和密码然后自动登录
login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- ZooKeeper概述与安装
ZooKeeper笔记 ZooKeeper概述 背景: 现代企业对计算机系统的计算存储能力要求越来越高,单纯的高性能服务器已经无法满足要求.企业的IT架构从集中式向分布式过度. 所谓分布式,就是将一个 ...
- 【bzoj1856】[Scoi2010]字符串 Catalan数
题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...
- Codeforces Round #306 (Div. 2) 550A Two Substrings
链接:http://codeforces.com/contest/550/problem/A 这是我第一次玩cf这种比赛,前面做了几场练习,觉得div2的前面几个还是比较水的. 所以看到这道题我果断觉 ...
- oracle查询时遇到的坑
select * from manu_routecard t left join manu_routecardlist mr on t.routecard_id = mr.routecard_id l ...
- HDU5974 A Simple Math Problem---数论--转化解方程
感谢:http://blog.csdn.net/mirror58229/article/details/63685884 题意:x+y=a lcm(x,y)=b 求x,y 12WCases + b ...