设为首页 加入收藏

TOP

黑马程序员——集合(一)
2019-05-11 01:39:48 】 浏览:52
Tags:黑马 程序员 集合

-----------android培训java培训java学习型技术博客、期待与您交流!------------

1、概述

集合就是一个容器,是用来存储对象的,里面可以存储不同的对象,只要是对象,就可以存储,集合可以分为很多种,他们的底层的存储结构是不一样的(数据结构),所以不同的集合有不同的功能,根据情况选择不同集合。但是他们有共同的特点,就把特点抽取出来了,形成了接口Collection。

集合的长度是变化的,数组的度长是固定的。

2、共性方法

(1)Add方法的参数类型是Object,以便于接收任意类型对象。

(2)集合中存储的都是对象的引用(地址)

publicstaticvoidbase_method(){

ArrayListal=newArrayList();

//1、添加元素

al.add("java01");

al.add("java02");

al.add("java03");

al.add("java04");

//打印原集合

sop("原集合:"+al);

//2、删除元素

al.remove("java02");

//al.clear();//清空集合中的元素

sop("后来的集合:"+al);

//3、获取长度

sop("al的长度:"+al.size());

//4、判断

sop("al中是否含有java01"+al.contains("java01"));

sop("al是否为空:"+al.isEmpty());

}

3、迭代器

迭代器是用来获取集合中元素,其实迭代器是集合的内部类,因为捏不累读取本类的数据最方便,但是不同的集合他们的存储的结构不同,并且每个集合都要读取数据,所以就把他们共同的方法抽取出来,然后利用本类来返回他们自己的迭代器,这样既方便又安全。

hasNext(),判断元素是否可以迭代next()方法然后迭代的下一个元素remove()从集合中移除此元素

Iteratorit=al.iterator();
while(it.hasNext())
{
System.out,println(it.next());
}

for(Iteratorit=al.iterator();it.hasNext();)
{
System.out,println(it.next());
}

第一种方式while循环完后,对象还在内存中,而第二种方式for循环完后,对象被回收了,因为实在for内部定义的,属于局部变量。

4、List集合共性方法

List中的元素是有序的,元素可以重复,因为该集合体系有索引
Set元素是无序的,不可以重复。

List集合中特有方法:

增:
add(index,obj)在指定位置插入元素。
addAll(index,Collection)添加一个集合进去
删:
remove(index)移除指定位置的元素。
改:
set(index,obj)修改指定位置元素
查:
get(index)
for(inti=0;i<al.size();i++)
{
al.get(i);
}
迭代器获取:
Iteratorit=al.iterator();
while(it.hasNext())
{
System.out,println(it.next());
}
//通过indexOf获取对象的位置
al.indexOf(obj);
//截取字串
al.subList(start,end);

5、ListIterator

List集合特有的迭代器:ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素(会发生ConcurrModificationException异常),而Iterator方法有限,如果想要添加、修改就要用ListIterator。

publicclassListDemo{

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

list.add("java01");

list.add("java02");

list.add("java03");

System.out.println("集合:"+list);

/*在第二位置添加元素*/

list.add(1,"java00");

System.out.println("集合:"+list);

/*利用自己的迭代器读取和插入数据,在java03后面添加元素*/

ListIteratorit=list.listIterator(0);

while(it.hasNext()){

if(it.next().equals("java03")){

it.add("javaLast");

}

}

System.out.println("集合:"+list);

/*List集合中1~3的元素,包含头不包含尾*/

Listlist1=list.subList(1,3);

System.out.println("集合List1="+list1);

}

}

结果:

集合:[java01,java02,java03]

集合:[java01,java00,java02,java03]

集合:[java01,java00,java02,java03,javaLast]

集合List1=:[java00,java02]

6、List子集

List集合子对象:ArrayList,LinkedList,Vector。
ArrayList底层使用的是数组结构,特点在于查询速度很快,但是增删稍慢。线程不同步
LinkedList使用的是链表结构。特点就是增删速度很快,查询很慢。
Vector:底层是数组数据结构,出现较早。1.0版本就出现了。线程不同步。无论增删还是查询都慢。被ArrayList取代了。

7、Vector

枚举就是Vector特有的取出方式。(迭代器、遍历、for循环、按角标索引)

因为枚举的名称和方法的名称都长,所以被迭代器取代了,枚举郁郁而终了。

publicstaticvoidmain(String[]args){

Vectorv=newVector();

v.add("java01");

v.add("java02");

v.add("java03");

Enumerationeunm=v.elements();

while(eunm.hasMoreElements())

{

System.out.println(eunm.nextElement());

}

}

8、LinkedList

addFirst();addLast();

getFirst();getLast();获取元素但是不删除元素

removeFirst();removeLast();获取元素但是删除元素,如果不存在此元素,那么据会抛出异常

1.6版本后的新方法

pollFirst();pollLast();获取并移除第一个元素或者最后一个元素,如果不存在,返回为null,不抛出异常。

offerFirst();offerlast();

peekFirst();peekLast();

例子:

importjava.util.LinkedList;

publicclassLinkedListDemo{

publicstaticvoidmain(String[]args){

LinkedListlist=newLinkedList();

list.add("forward01");

list.addFirst("forward00");

list.addLast("forwardLast");

System.out.println("集合:"+list);

//list.get(3);//此会报异常,原因是集合中没有此元素

System.out.println("集合中的第一个元素:"+list.remove(0));//移除并且能获得,但是如果没有此元素的话,那么就会报异常

System.out.println("移除第一个元素后的集合:"+list);

System.out.println("获取第一个元素:"+list.peekFirst());//获取第一个元素,但是不移除,如果不存在,则是null

System.out.println("获取第一个元素:"+list.peekLast());//获取最后一个元素,但是不移除,如果不存在,则是null

}

}

集合:[forward00,forward01,forwardLast]

集合中的第一个元素:forward00

移除第一个元素后的集合:[forward01,forwardLast]

获取第一个元素:forward01

获取第一个元素:forwardLast

9、LinkedList练习

需求:
使用LinkedList模拟一个堆栈或队列数据结构。
堆栈:先进后出,如同一个杯子;
队列:先进先出,如同一个水管。

classQueue{

privateLinkedListlink;

Queue(){

link=newLinkedList();

}

publicvoidmyAdd(Objectobj){

link.addFirst(obj);

}

publicObjectmyGet(){

//注:此处用removeLast()而不是getLast()

returnlink.removeLast();

}

publicbooleanisNull(){

returnlink.isEmpty();

}

}

classZhan{

privateLinkedListlink;

Zhan(){

link=newLinkedList();

}

publicvoidmyAdd(Objectobj){

link.addFirst(obj);

}

publicObjectmyGet(){

//注:此处用removeLast()而不是getLast()

returnlink.removeFirst();

}

publicbooleanisNull(){

returnlink.isEmpty();

}

}

publicclassLinkedListTest{

publicstaticvoidmain(String[]args){

System.out.println("队列打印:");

Queueq=newQueue();

q.myAdd("java01");

q.myAdd("java02");

q.myAdd("java03");

while(!q.isNull()){

System.out.println(q.myGet());

}

System.out.println("堆栈打印:");

Zhanz=newZhan();

z.myAdd("java01");

z.myAdd("java02");

z.myAdd("java03");

while(!z.isNull()){

System.out.println(z.myGet());

}

}

}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MapReduce 下一篇Runtime.exec的详细介绍

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目