Java集合类01
来源:互联网 发布:牛排做法 知乎 编辑:程序博客网 时间:2024/06/06 00:17
集合类
---为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多
个对象的操作,就需要存储对象,集合就是存储对象最常用的一
种方式
---数组和集合类同是容器,有何不同?
-数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
-数组中可以存储一类基本数据类型,集合只能存储对象但可以不同类型。
---集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型
的对象。
程序示例
import java.util.*;//使用集合需要导入包
/*
1.add方法的参数类型是Object,以便接收任意类型的对象
2.集合中存储的都是对象的引用(地址)
3.迭代器(Iterator)是获取集合中元素的一种方式
*/
class CollectionDemo
{
publicstatic void main(String[] args)
{
method_get();
}
publicstatic void method_get()
{
//迭代器演示
ArrayListarrlist1 = new ArrayList();
arrlist1.add("zhaoyanli");
arrlist1.add("zhaoxiaoleng");
arrlist1.add("huanhuan");
for(Iteratoriter = arrlist1.iterator(); iter.hasNext(); )//对内存优化好!
{
System.out.println(iter.next());
}
}
publicstatic void method_2()
{
//两个集合的操作
ArrayList arrlist1 = new ArrayList();
arrlist1.add("zhaoyanli");
arrlist1.add("huanhuan");
arrlist1.add("beibeimama");
ArrayListarrlist2 = new ArrayList();
arrlist2.add("huanhuan");
arrlist2.add("henaihenai");
//arrlist1.retainAll(arrlist2);//只保留arrlist1中两集合的交集
arrlist1.removeAll(arrlist2);//去掉arrlist1中两集合的交集
System.out.println("arrlist1:"+arrlist1);
System.out.println("arrlist2:"+arrlist2);
}
publicstatic void method_1()
{
//创建一个集合容器,使用Collection接口的子类ArrayList
ArrayListarrlist = new ArrayList();
//添加元素(对象)
arrlist.add("xiafan");
arrlist.add("love");
arrlist.add("huanhuan");
arrlist.add("2012050807021226");
//删除集合元素
arrlist.remove("love");
//判断元素存在
System.out.println("huanhuan在吗:"+arrlist.contains("huanhuan"));
System.out.println("新集合:"+arrlist);
//清空集合
//arrlist.clear();
//获取集合长度
System.out.println("size:"+arrlist.size());
}
}
List
---List:元素师有序的,元素可以重复,因为该机和体系有索引。
---ArrayList:底层使用的是数组结构。特点:查询快,增删慢,线程不同步
---LinkedList:底层使用的是链表数据结构。特点:查询慢,增删快
---Vector:底层使用数组结构,线程同步,被ArrayList替代了
列表迭代器
因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
List集合特有的迭代器 ListIterator是 Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生异常。
我们采用的解决方案是,使用 Lsit集合的 listIterator()方法获取
程序示例ArrayList:
import java.util.*;
public class ListDemo
{
publicstatic void main(String[] args)
{
ArrayListarrlist = new ArrayList();
arrlist.add("xiafan");
arrlist.add("love");
arrlist.add("huanhuan");
//在指定位置增加元素
arrlist.add(1,"beibei");
System.out.println(arrlist);
//删除指定位置元素
//arrlist.remove(0);
//System.out.println(arrlist);
//替代指定位置的元素
arrlist.set(3,"zhaoxiaoleng");
System.out.println(arrlist);
//返回指定位置的元素
for(inti = 0; i < arrlist.size(); i++)
{
System.out.println("arrlist["+i+"]="+arrlist.get(i));
}
/*
列表迭代器获取元素方式
for(Iteratoriter = arrlist.iterator(); iter.hasNext();)
{
System.out.println(iter.next());
}
*/
//通过indexOf获取对象的位置
System.out.println("zhaoxiaolengindex = " + arrlist.indexOf("zhaoxiaoleng"));
//获取子列表
Listsublist = arrlist.subList(2, 4);//包含头,不包含尾
System.out.println("sublist= " + sublist);
}
}
程序示例LinkedList:
importjava.util.*;
class MyQueue//队列
{
private LinkedList linkList;
MyQueue()
{
linkList = new LinkedList();
}
public void myAdd(Object obj)
{
linkList.offerLast(obj);//添加
}
public Object myGet()//返回对象
{
//return linkList.peekFirst();返回
return linkList.pollFirst();//删除元素(返回)
}
public boolean isNull()
{
return linkList.isEmpty();
}
}
class MyStack//栈
{
private LinkedList linkList;
MyStack()
{
linkList = new LinkedList();
}
public void myAdd(Object obj)
{
linkList.offerLast(obj);
}
public Object myGet()//返回对象
{
return linkList.pollLast();
}
public boolean isNull()
{
return linkList.isEmpty();
}
}
public classLinkedListDemo
{
public static void main(String[] args)
{
MyStack stack = new MyStack();
stack.myAdd("huanhuan");
stack.myAdd("beibei");
stack.myAdd("fanfan");
while(!stack.isNull())
{
System.out.println(stack.myGet());
}
}
public static void linkedListMethod()
{
LinkedList linkList = newLinkedList();
linkList.addFirst("zhaoyanli");
linkList.addFirst("zhaoxiaoleng");
linkList.addFirst("huanhuan");
System.out.println(linkList);
System.out.println(linkList.getLast());
System.out.println(linkList.removeFirst());
System.out.println(linkList);
}
}
练习
/*
将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如:存放人对象。同姓名同年龄,视为同一个人。
*/
importjava.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)//自动调用该方法
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;//向下转型,因为Object类中无该equals方法
//System.out.println(this.name+"------"+p.name);//打印每次比较的情况
return (this.name.equals(p.name))&& (this.age == p.age);
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
public classArrayListTest2
{
public static ArrayListsingleElement(ArrayList arrList)//去重复元素方法
{
ArrayList tempList = newArrayList();//定义临时容器
for(Iterator iter =arrList.iterator(); iter.hasNext(); )
{
Object obj = iter.next();
if(!tempList.contains(obj))
tempList.add(obj);
}
return tempList;
}
public static void main(String[] args)
{
ArrayList arrList = newArrayList();
arrList.add(newPerson("huanhuan", 22));
arrList.add(newPerson("xiaoleng", 22));
arrList.add(newPerson("huanhuan", 21));
arrList.add(newPerson("huanhuan", 22));
arrList.add(newPerson("xiaoleng", 22));
arrList = singleElement(arrList);
for(Iterator iter =arrList.iterator(); iter.hasNext(); )
{
Person pers =(Person)iter.next();//向下转型
System.out.println(pers.getName()+"-----"+pers.getAge());
}
}
}
Set
---Set:元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复
---HashSet:底层使用的数据结构是哈希表
HashSet是如何保证元素唯一性的?
通过元素的两个方法,hashCode()和equals()。如果hashCode值相同,会
调用equals方法,若hashCode值不同,不会调用equals。
注意,判断元素是否存在及删除等操作,依据的是元素的hashCode和equals方法
程序示例:
importjava.util.*;
class Person
{
private String name;
private int age;
Person(String name, int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
return name.hashCode()+age*22;//哈希地址的计算方法,
//hashCode()字符串中定义了此方法
}
public boolean equals(Object obj)
{
Person per = (Person)obj;
if(!(per instanceof Person))//注意写法
return false;
return(per.name.equals(this.name)) && (per.age== this.age);
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
public class HashSetDemo
{
/*
public static void hashDemo_basic()
{
HashSet hashSet = new HashSet();
hashSet.add("huanhuan");
hashSet.add("fanfan");
hashSet.add("beibei");
for(Iterator iter =hashSet.iterator(); iter.hasNext(); )
{
System.out.println("----->"+ iter.next());
}
}
*/
public static void hashDemo_advanced()
{
HashSet hashSet = new HashSet();
hashSet.add(newPerson("fanfan", 23));
hashSet.add(newPerson("huanhuan", 22));
hashSet.add(newPerson("huanhuan", 22));
hashSet.add(newPerson("beibei", 1));
for(Iterator iter =hashSet.iterator(); iter.hasNext(); )
{
Person p =(Person)iter.next();//向下转型
System.out.println(p.getName()+"::"+p.getAge());
}
//System.out.println("ourbaby:"+hashSet.remove(new Person("beibei", 1)));
}
public static void main(String[] args)
{
//hashDemo();
hashDemo_advanced();
}
}
- Java集合类01
- Java集合:集合类详解
- Java集合-常用集合类
- JAVA【集合一】集合类
- Java集合 01
- java集合框架01
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- Java集合类(整理)
- java集合类
- JAVA中的集合类
- Java集合类笔记
- JAVA中的集合类
- java集合类
- java集合类总结
- JAVA中的集合类 - -
- JAVA中的集合类
- C primer plus第五版第十七章film2.c的一个错误
- org.hibernate.InvalidMappingException: Could not parse mapping document from resource
- Objective-C语法快速参考
- android 设置系统屏幕亮度
- SVD在推荐系统中的应用
- Java集合类01
- 程序员面试中什么最重要?
- ubuntu安装配置Mysql
- 有关全屏手写
- Php魔术常量
- FastReport 程序员手册
- 苦逼的程序员
- 防火墙开发硬件选型
- 程序员在面试中如何占据主动?