黑马程序员_温习 集合二 (个人笔记)摘要:(List集合)

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


摘要:(List集合)



Collection集合
|--List集合:元素是有序的,元素可重复,因为该集合体系有索引,比较方式 equals


|--ArrayList:底层使用数组结构,不同步,增删慢,查询快,初始化10位,超过50%延长(节省)


|--LinkedList:底层使用链表结构,不同步,增删快,查询慢


|--Vector:底层使用数组结构,同步,被ArrayList替代,初始化10位,超过100%延长(浪费)


|--Set集合:元素无序,元素不可重复,没有索引,比较方式:
|--HashSet:  HashCode 和 equals
|--TreeSet:  Comparable


List集合体系特有方法(常用的):
|--存储
|--在指定角标位添加:boolean add(int index, E element)
|--在指定角标位添加一组:boolean addAll(int index, Collection<? extends E> c) //添加的必须是,泛型的子类


|--删除
|--删除指定角标位元素(返回值是该元素):元素 remove(int index) 


|--替换
|--替换角标位元素(返回值为原元素):原元素 set(int index, E element) 

|--获取
|--获取指定角标位元素:元素 get(int index) 
|--获取范围:范围元素 subList(int fromIndex, int toIndex) //包头布包围


|--复写迭代器(实现了更多方法)避免了
|--List特有迭代器:(返回值是List迭代器) listIterator()
|--特有方法(常用的)
|--反向遍历:boolean hasPrevious()
|--返回前一个元素:元素 previous()
|--替换下一个元素:void set(元素)
|--返回下个元素角标位:int nextIndex()
|--反向返回下一个元素角标位:int previousIndex()

例:(并发修改异常)
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
Iterator it = al.iterator();//it记录了当前List集合元素,若List集合加减元素,it不会知道
while (it.hasNext())
{
Object obj = it.next();
al.add("java03"); //当用it.next取出时,al.add在存储。而it.next并不知道List集合存储元素
//所以会造成并发修改异常
}
并发修改异常:ConcurrentModificationException


例(使用ListIterator)
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
ListIterator li = al.listIterator();//List的迭代器 记录集合元素,若加减元素,List迭代器知道
while (li.hasNext())
{
Object obj = li.next();
li.add("java03");
}


List集合体系
|--ArrayList:底层使用数组结构,不同步,增删慢,查询快,初始化10位,超过50%延长(节省)


|--LinkedList:底层使用链表结构,不同步,增删快,查询慢


|--Vector:底层使用数组结构,同步,被ArrayList替代,初始化10位,超过100%延长(浪费)
图例:结构(数组,链表)






Vector集合常用方法
|--枚举(迭代器)IO流中会用到
Enumeration elements()


例:
Vector v = new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
Enumeration en = v.elements();//相当于Iterator
while (en.hasMoreElements())//相当于it.hasNext()
{
en.nextElement();//相当于it.next()
}


LinkedList集合常用方法
|--添加:
|--正序添加:void addFirst(元素)
|--反序添加:void addLast(元素)


|--获取
|--正序获取:(元素) getFirst()
|--反序获取:(元素) getLast()


|--删除
|--正序删除:(元素) removeFirst()
|--反序删除:(元素) removeLast()




例:
LinkedList ld = new LinkedList();
ld.addFirst("java01");//正序添加元素
ld.addFirst("java02");
ld.addFirst("java03");
System.out.println(ld);//-->[java03, java02, java01] 正序添加的特点先存的在后边


while (!ld.isEmpty())//若有元素就循环
{
System.out.print(ld.removeLast());//反序删除-->java01 java02 java03 反序就是从后往前
}


|--JDK1.6后变化
|--删除:pollFirst 和 pollLast 替换了 removeFirst 和 removeLast
|--作用相同,但若集合位空(poll返回null)而(remove是抛异常)
|--获取:peekFirst 和 peekLast 替换了 getFirst 和 getLast
|--作用同上
|--添加:offerFirst 和 offerLast 替换 addFirst 和 addLast
|--作用同上


练习(LinkedList):使用LinkedList模拟一个堆栈或者队列数据结构
先进先出:水管
先进后出:杯子
import java.util.*;
class Duilie
{
private LinkedList link;
Duilie
{
Link = new LinkedList();//初始化就建立LinkedList集合
}
public void myAdd(object obj)//特有添加方法
{
link.addFirst(obj);//正序添加
}
public Object myGet()//特有取出方法
{
return link.removeFirst();//正序取出(先进后出)
}
public boolean isNull()//特有判断有没有元素方法
{
retrun link.isEmpty();//其实就是用的isEmpty
}
}


class LinkedListText
{
public static void main(String[] args)
{
Duilie  d1 = new Duilie();//常见Duilie对象
d1.myAdd("java01");//特有方法添加元素
d1.myAdd("java02");
d1.myAdd("java03");
}
while (!d1.isNull())//特有方法判断 有没有元素
{
System.out.println(d1.myGet()); //特有方法取出元素
}
}


练习(ArrayList)去除ArrayList集合中重复的元素
class 
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();//建集合
al.add("java01");//添加元素
al.add("java02");
al.add("java03");
al.add("java04");
al = singleElement(al);//调用方法,将al穿入,并用al接收新集合
System.out.println(al);//打印新集合
}
public static ArrayList singleElement(ArrayList al)//方法:删除重复元素
{
ArrayList newAl = new ArrayList();//建一个集合
Iterator it = al.iterator();//让迭代器指向传入的集合
while (it.hasNext())//遍历集合
{
Object obj = it.next();//一个一个取出元素


if(!newAl.contains(obj))//一个一个判断,若当前集合中没有这个元素则
newAl.add(obj);//将这个元素添加到集合中
}
return newAl;最后返回这个新集合
}
}


练习(ArrayList)将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象
摘要一:默认调用比较方式是Object类中的equals方法,而Person类中需要特有的比较方法
故,person类需要复写equals方法
摘要二:因为集合的添加方法add的参数是Objcet类型,没有person类中的特有方法,所以要用
person类的特有方法,必须向下转型
import java.util.*;
class person 
{
private String name;
private int age;
person(String name,int age)//初始化就有姓名和年龄
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)//复写equals方法实现特有比较
{
if(!(obj instanceof person))//若不是person类则
throw new RuntimeException("类型错误");//抛异常
person p = (person)obj; //否则转回person型
return this.name.equals(p.name) && this.age == p.age ;//特有equals方法:若名字和年龄都相等则返回true
}
public String getname()//返回名字
{
return this.name;
}
public int getage()//返回年龄
{
return this.age;
}
}


class Demo2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();//建立集合
al.add(new person("zhang",20));//添加person对象
al.add(new person("龙",20));
al.add(new person("zhang",20));
al.add(new person("zhang",30));
al = mydelete(al);//调用删除重复方法传入al,并用al接收新的集合
Iterator it = al.iterator();//用迭代器指向新集合
while (it.hasNext())
{
person p = (person)it.next();//因为元素添加add接收的是Object类型
//而要用到getname 和 getage两个person类特有方法,故要向下转型
System.out.println(p.getname()+"...."+p.getage());//打印,用person类特有方法 调用名字和年龄
}
}
public static ArrayList mydelete(ArrayList al)//建立删除重复方法
{
ArrayList all = new ArrayList();//建一个集合用于接收删除后的元素
Iterator it = al.iterator();//迭代器指向传入的集合
while (it.hasNext())//遍历集合
{
Object obj = it.next();//一个元素一个元素取出
if(!all.contains(obj))//若这个元素没在新集合中
all.add(obj);//就在新集合中加入这个元素
}
return all;//最后返回这个新集合
}


}


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值