09
2018
12

JAVA学习-Java集合框架介绍、ArrayList、LinkedList类的常见使用方法

Java集合框架介绍

所谓的框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,它包含了实现集合的接口与类。

集合框架中不同的集合类有各自不同的数据结构,所以在使用中要根据应用的性能要求来选择不同的集合类。

集合类存放在java.util包中,今后进行程序编写时将大量使用集合类和相关接口。

Iterable:迭代器接口

实现该接口允许对象成功“foreach”语句的目标,即该集合对象允许迭代。

Collection是Iterable的子接口,可以迭代访问

方法:

Iterator<T> iterator(),返回一个在一组T类型的元素上进行迭代的迭代器

迭代器是实现了Iterator、ListIterator接口的类对象,可以通过遍历类集,访问操作其中的每个元素。

ListIterator扩展了父接口Iterator,允许双向遍历集合,并可以修改和删除元素。

Collection:类集接口

Collection接口定义的常用方法:

int size()

boolean isEmpty()

boolean contains(Object obj)

Iterator<T> iterator()

Object[] toArray()

boolean add(T obj)

boolean remove(Object obj)

void clear()

List:列表接口

List接口扩展了Collection,特点:有序且可重复

最常用的两个List接口的实现类是ArrayList和LinkedList

ArrayList-动态数组

ArrayList类扩展AbstractList并实现了List接口

ArrayList构造方法

ArrayList()

ArrayList(Collection c)

ArrayList(int capacity)

ArrayList常用方法

boolean add(E e) 

void add(int index, E element) 

T get(int index)

int indexOf(Object o)

boolean remove(int index)

boolean remove(Object o) 

int size()

Object[] toArray() 

boolean isEmpty() 

void clear()  

Set:数据集接口

Set接口扩展了Collection,特点:无序且不可重复

Queue:队列

Map:键值对接口

Map映射集合,是一个存储关键字/值对的对象。给定一个关键字,可查询得到它的值,关键字和值都可以是对象。不能使用迭代器遍历。



demo:

package pkg1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
/*
 * 默认容量大小10,超过时,默认扩大到1.5倍,如果还不够就使用需要的大小(oldSize+AddSize)
 */
List<String> strList=new ArrayList<String>();
strList.add("No001");
strList.add("No002");
strList.add("No003");
strList.add(1,"No007");//指定位置插入
strList.set(0, "No0001");//替换
System.out.println("使用迭代器进行遍历");
Iterator<String> it = strList.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("使用增强for循环进行遍历");
for(String str:strList){
System.out.println(str);
}
System.out.println("——————————————————————————");
System.out.println("indexOf(abc):"+strList.indexOf("abc"));
System.out.println("indexOf(No007):"+strList.indexOf("No007"));
System.out.println("删除No007结果:"+strList.remove("No007"));//移除首次出现的元素,如果存在返回true
System.out.println("contains(No007)结果:"+strList.contains("No007"));
System.out.println("get(0)结果:"+strList.get(0));
System.out.println("size()结果:"+strList.size());
System.out.println("——————————————————————————");
ArrayList<Student> stuList=new ArrayList<Student>();
stuList.add(new Student("张三", 16));
stuList.add(new Student("李四", 15));
stuList.add(new Student("Jack", 19));
Student stu4=new Student("张三", 16);
Student stu5=new Student("李四", 15);
//不是同一对象,默认找不到
//重写equals方法,可以实现
System.out.println("indexOf(stu4):"+stuList.indexOf(stu4));
//删除也是用equals判断是否找到
//查看类或方法源码:ctrl+点击类名或方法名
//看不了源码,可以参考:https://blog.csdn.net/u011514810/article/details/53196371
System.out.println("remove(stu4):"+stuList.remove(stu4));
System.out.println("indexOf(stu4):"+stuList.indexOf(stu4));
System.out.println("contains(stu5):"+stuList.contains(stu5));
}
}
class Student{
private String name;
private int age;
//自动生成构造方法:
//Source->Generate Constructor use Fileds  
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
//自动生成get,set方法
//Source->Generate Getters and Setters
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;
}
//自动生成equals方法的重写
//Source->Generate hashCode() and equals(),把hashCode方法删掉即可
@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;
}
}


效果:


LinkedList双向链表

LinkedList类扩展AbstractSequentialList并实现List、Deque接口

LinkedList提供了一个链表数据结构

LinkedList双向链表添加、删除效率比ArrayList高,但查找效率比ArrayList低

构造方法

LinkedList()

LinkedList(Collection c)

除了继承的方法之外,LinkedList还有一些特有的方法

void addFirst(T obj)

void addLast(T obj)

T removeFirst()

T removeLast()


demo:

package pkg1;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list=new LinkedList<String>();
list.add("张三");
list.add("李四");
list.add("jack");
list.addFirst("wangwu");//添加为第一个
for(String str:list){
System.out.println(str);
}
System.out.println("removeFirst:"+list.removeFirst());//移除并返回,没有则报错
System.out.println("size:"+list.size());
System.out.println("pollFirst:"+list.pollFirst());//移除并返回,没有则返回null
System.out.println("size:"+list.size());
}
}

效果:



版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。