Java集合
Java 集合类可以说是我们在工作中运用最多、最频繁的类。相比于数组( Array )来说,集合类的长度可变,更加方便开发。
Java 集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时, Java 集合可以动态的进行扩展,随着元素的增加而扩大。在 Java 中,集合类通常存在于 java.util 包中。
Java 集合主要由 2 大体系构成,分别是 Collection 体系和 Map 体系,其中 Collection 和 Map 分别是 2 大体系中的顶层接口。
Collection 主要有三个子接口,分别为 List( 列表 ) 、 Set( 集 ) 、 Queue( 队列 ) 。其中, List 、 Queue 中的元素有序可重复,而 Set 中的元素无序不可重复。
List 中主要有 ArrayList 、 LinkedList 两个实现类; Set 中则是有 HashSet 实现类;而 Queue 是在 JDK1.5 后才出现的新集合,主要以 外汇代理 数组和链表两种形式存在。
Map 同属于 java.util 包中,是集合的一部分,但与 Collection 是相互独立的,没有任何关系。 Map 中都是以 key-value 的形式存在,其中 key 必须唯一,主要有 HashMap 、 HashTable 、 treeMap 三个实现类。
集合迭代
package com.cloud.list;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List list=new ArrayList();
list.add("Spring1");
list.add("Spring2");
list.add("Spring3");
list.add("Spring4");
System.out.println(list.get(i)+";");
}
List sublist=list.subList(1, 4);
System.out.println(sublist);
}
}
package com.cloud.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add("Spring1");
list.add("Spring2");
list.add("Spring3");
ListIterator it=list.listIterator();
it.next();
it.next();
it.set("Spring5");
/*
it.add("Spring4");
while(it.hasNext()){
System.out.println(it.next());
}
*/
System.out.println(list);
}
}
正逆迭代
package com.cloud.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add("Spring1");
list.add("Spring2");
list.add("Spring3");
// 一: for 变量集合
System.out.print(list.get(i)+";");
}
System.out.println();
// 二:迭代器正序迭代
ListIterator it=list.listIterator();
while(it.hasNext()){
System.out.print(it.next()+";");
}
System.out.println();
// 三:迭代器倒序迭代
while(it.hasPrevious()){
System.out.print(it.previous()+";");
}
}
}
ArrayList 集合
package com.cloud.list;
import java.util.ArrayList;
import java.util.Iterator;
/* ArrayList
* 查询快,增删慢
*/
public class Demo4 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new Book(1,"java 编程 1"));
list.add(new Book(2,"java 编程 2"));
list.add(new Book(3,"java 编程 3"));
list.add(new Book(3,"java 编程 4"));
System.out.println(list);
ArrayList list2=clearRepeat(list);
System.out.println(list2);
}
public static ArrayList clearRepeat(ArrayList list){
// 创建新的集合
ArrayList newList=new ArrayList();
// 获取新的集合
Iterator it= list.iterator();
while(it.hasNext()){
Book book=(Book) it.next();
if(!newList.contains(book)){
newList.add(book);
}
}
return newList;
}
}
class Book{
int id;
String name;
public Book(int id,String name){
this.id=id;
this.name=name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "( 编号: "+this.id+"; 名字: "+this.name+")";
}
@Override
public boolean equals(Object obj) {
Book book=(Book)obj;
return this.id==book.id;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
}
LinkedList 集合
package com.cloud.list;
import java.util.Iterator;
import java.util.LinkedList;
public class Demo5 {
/*
LinkedList
查询速度慢,增删快
Linkedlist 特有的方法:
1 :方法介绍
addFirst(E e)
addLast(E e)
getFirst()
getLast()
removeFirst()
removeLast()
2 :数据结构
1 :栈 ( 1.6 ) : 主要是用于实现堆栈数据结构的存储方式。
先进后出
push()
pop()
2 :队列(双端队列 1.5 ): 主要是为了让你们可以使用 LinkedList 模拟队列数据结构的存储方式。
先进先出
offer()
poll()
3 :返回逆序的迭代器对象
descendingIterator() 返回逆序的迭代器对象
*/
public static void main(String[] args) {
LinkedList list=new LinkedList();
list.add("Spring2");
list.add("Spring3");
list.add("Spring4");
// list.addFirst("Spring1");
// list.push("Spring");// 把该元素放到集合的首位置
// System.out.println(" 集合的首元素 "+list.pop());// 移除并返回集合中的第一个元素
// list.offer("Spring0");// 添加到末尾位置
// System.out.println(list);
// 逆向输出的迭代器
Iterator it = list.descendingIterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
模拟集合中的值栈
package com.cloud.list;
import java.util.LinkedList;
public class Demo6 {
/*
2 :数据结构
1 :栈 ( 1.6 ) : 主要是用于实现堆栈数据结构的存储方式。
先进后出
push()
pop()
2 :队列(双端队列 1.5 ): 主要是为了让你们可以使用 LinkedList 模拟队列数据结构的存储方式。
先进先出
offer()
poll()
*/
public static void main(String[] args) {
System.out.println("====== 测试值栈 =======");
StackList list=new StackList();
list.add("Spring1");
list.add("Spring2");
list.add("Spring3");
// System.out.println(list.pop());// 删除并返回 Spring3
// System.out.println(list.pop());// 删除并返回 Spring2
// System.out.println(list.pop());// 删除并返回 Spring1
/*list.size() 大小在不断的变化,所以很难遍历完
System.out.println(list.pop());
}
*/
int size=list.size();
System.out.println(list.pop());
}
System.out.println("====== 测试队列 =======");
TeamList list2=new TeamList();
list2.add("Spring1");
list2.add("Spring2");
list2.add("Spring3");
int size2=list2.size();
System.out.println(list2.remove());
}
}
}
// 模拟堆栈存储方式
class StackList{
LinkedList list;
public StackList(){
list=new LinkedList();
}
// 进栈
public void add(Object o){
list.push(o);
}
// 出栈
public Object pop(){
return list.pop();
}
// 大小
public int size(){
return list.size();
}
}
// 模拟队列存储方式
class TeamList{
LinkedList list;
public TeamList(){
list=new LinkedList();
}
public void add(Object o){
list.offer(o);
}
public Object remove(){
return list.poll();
}
public int size(){
return list.size();
}
}
模拟洗牌的案例
package com.cloud.day3;
import java.util.LinkedList;
import java.util.Random;
/*
* 实现一副牌的洗牌功能
*/
class Poker{
String color;
String num;
public Poker(String color,String num){
this.color=color;
this.num=num;
}
public String toString(){
return "{"+color+num+"}";
}
}
public class Demo1 {
public static void main(String[] args) {
LinkedList
System.out.println(list.size()+" 张牌 ");
washPokers(list);
showPokers(list);
}
// 获取一副牌
public static LinkedList
LinkedList
String [] color={" 红桃 "," 黑桃 "," 方块 "," 梅花 "};
String [] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
list.add(new Poker(color[j],nums[i]));
}
}
return list;
}
// 显示一副牌
public static void showPokers(LinkedList
System.out.print(list.get(i));
if(i%10==9){
System.out.println();
}
}
}
// 刷新一副牌
public static void washPokers(LinkedList
Random random=new Random();
for(int i=0;i<20;i++){
// 随机产生两个索引值
int index1=random.nextInt(pokers.size());
int index2=random.nextInt(pokers.size());
// 根据索引取出两张牌,然后交换顺序
Poker poker1=pokers.get(index1);
Poker poker2=pokers.get(index2);
pokers.set(index1, poker2);
pokers.set(index2, poker1);
}
}
}
集合比较大小
package com.cloud.day3;
import java.util.LinkedList;
public class Demo2 {
public static void main(String[] args) {
LinkedList
list.add(new Person("Spring1",13));
list.add(new Person("Spring2",12));
list.add(new Person("Spring3",11));
Person p1 = list.get(i);
Person p2 = list.get(j);
if(p1.age>p2.age){
list.set(i, p2);
list.set(j, p1);
}
}
}
System.out.println(list);
}
}
class Person{
String name;
int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "[ 姓名: "+this.name+"; 年龄: "+this.age+"]";
}
}