一、集合框架
集合是ava语言中非常重要的API;
用来存储多个数据;
实现了不同的数据结构。
三大接口:
Collection:所有集合类的根接口;List、set是常用的子接口,ArrayList、LinkedList、HashSet是其下常用的三个类。
Map:映射接口,存放键值对;HashMap是其下常用的类。
Iterator:遍历集合的迭代接口。
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。
二、Collection接口
1、概念
Collection接口
Collection即集合,是所有集合类的根接口,同时Collection接口是一个泛型接口。
方法:
add(E):添加对象;
Iterator iterator():生成迭代器对象,进而可 以迭代集合中的元素;
int size();获取集合中元素数量(size实际大小)。
2、Collection的子接口
List:有序的集合,元素有序存入;
Set:无序无重复的集合,即存入的元素不重复;
Queue:队列,jdk1.5版本新增接口,Queue实现了“先进先出”(FIFO)的存储结构,具有所有集合基本操作,Queue还提供了一些新的插入、提取、查询等方法。
三、Map接口
1、Map接口应用
Map中保存的是键值对Map ,Key值不允许重复,如果重复,则覆盖。
常用方法:
put(K key,V value)该方法可以将key和value存到Map对象;
get(Object key)该方法可以根据key值返回对应的value;
size()返回Map对象中键值对的数量。
2、Map接口的实现类
HashMap较常用的Map集合类,key值的hashCode和equals保证元素唯一性;
TreeMap不仅可以保证key不重复,还可以对value数据进行排序;
HashTablejdk1.0中定义的类,实现同步。
四、List接口
1、概念
继承了Collection接口,并且扩展出属于自己的方法,List 集合中的元素都是与索引有关系的,因此List 集合扩展的方法都是与索引有关系的。
例如: add(int index,E)……添加元素在所对应的 索引位置。
2、List的实现类
ArrayList:数组列表,数据采用数组方式存储(实际用的最多的集合);
LinkedList:链表;
Vector:jdk1.0中的集合,实现了同步。
a、ArrayList
ArrayList被称为数组列表,数据采用数组的方式存储,使用连续内存存储,是Java语言中可变长度数组的实现。
ArrayList的常用方法:
add(Object o);->集合中添加数据;
remove(Object o)->删除集合中的数据;
add(int index, Object element)->给集合中某个索引位置添加一个数据;
get(int index)->获取集合中某个位置的信息。
ArrayList的应用:
基本使用:不使用泛型,目前很少用
public class TestArrayList {
public static void main(String[] args) {
List list= new ArrayList();
list.add("string");
list.add(12);
list.add('w');
}
}可以将任何类型对象都存储进去。
泛型的使用:对象中只能持有相同类型对象,否则将发生编译错误。
Test:(运行需要创建User类,写出其有参构造,get、set方法)
public class GenericsList {
public static void main(String[] args) {
. //创建用户对象
User user=new User("张三");
User user1=new User("李四");
//创建集合对象,存放用户对象
List userList=new ArrayList();
userList.add(user);
userList.add(user1);
}
}
b、LinkedList
LinkedList是以链表的方式存放的,每个节点上存放的是数据信息。
LinkedList的常用方法:
add(E element)—向链表末尾添加一个新的节点,该节点中的数据是参数element指定的对象;
add(int index, E element)—向链表的指定位置添加一个新的 节点,该节点中的数据是参数element指定的对象;
扩展方法:
addFirst(E element)—向链表的头添加新节点,该节点中的数据 是参数element指定的对象;
addLast(E element)—向链表的末尾添加新节点,该节点中 的数据是参数element指定的对象。
LinkedList的应用:
例如:
public class TestLinkedList {
public static void main(String[] args) {
//创建用户对象
User user=new User("王星");
//创建集合对象,存放用户对象
List list=new LinkedList();
list.add(user);
}
}
c、ArrayList和LInkedList的遍历(迭代器遍历(Iterator)-很少使用:通过集合返回迭代器)
增强for循环:也是通过迭代器的方法获取信息
public class GenericsList {
public static void main(String[] args) {
//创建用户对象
User user=new User("张三");
User user1=new User("李四");
//创建集合对象,存放用户对象
List userList=new LinkedList();
userList.add(user);
userList.add(user1);
for(User userInfo:userList){
System.out.println(userInfo);
}
}
}
for循环遍历:通过索引值获取所对应的数据信息
public class GenericsList {
public static void main(String[] args) {
//创建用户对象
User user=new User("张三");
User user1=new User("李四");
//创建集合对象,存放用户对象
List userList=new ArrayList();
userList.add(user);
userList.add(user1);
for(int i=0;i
System.out.println(userList.get(i));
}
}
}
五、Set接口
1、概念
继承了Collection接口,Set中所存储的元素是不重复的,但是是无序的,Set中的元素是没有索引的。
2、Set集合接口的实现类
HashSet:底层是哈希码值,基于HashMap实现的,调用equals方法比较,都返回false。(比较的是虚地址,可重写equals方法使其同类中的两个对象,并且将属性值都赋值为相同的值,归为同一个对象)
TreeSet:元素不重复,并且元素实现了排序(通过实现Set的另外的子接口SortedSet接口实现排序)
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
3、HashSet和TreeSet
HashSet的常用方法:add(E o)将指定的元素添加到set。
例如:(与ArrayList是相同的)
public class TreeSetExemple {
public static void main(String[] args) {
User user1=new User("张华");
User user2=new User("张星");
Set userSet=new TreeSet();
userSet.add(user1);
userSet.add(user2);
Set userSet1=new HashSet();
userSet1.add(user1);
userSet1.add(user2);
}
}
TreeSet的常用方法:add(E o):将指定的元素添加到 set(如果尚未存在于该set中);
first():返回已排序set中当前的第一个(最小)元素;
last():返回已排序set中当前的最后一个(最大)元素。
TreeSet中存放的对象需要实现Comparable
例如:
public class UserInfo implements Comparable {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(UserInfo o) { (判断条件自己定义)
if(o.getName().equals(name)){
return 0;
}else return 1;
}
}
public class TreeSetExemple {
public static void main(String[] args) {
UserInfo user1=new UserInfo();
user.setName("张华");
UserInfo user2=new UserInfo();
user2.setName("王华");
Set userSet =new TreeSet();
userSet.add(user1);
userSet.add(user2);
}
}
4、HashSet和TreeSet的遍历
增强for循环
public class SetExemple {
public static void main(String[] args) {
User user1=new User(“王辉");
User user2=new User("qw");
Set userSet=newHashSet();
Set userSet=new TreeSet();
userSet.add(user1); userSet.add(user2);
//增强for循环遍历
for(User user:userSet ){
System.out.println( user.getUserName());
}
}
}
六、Map集合的常用实现类
1、HashMap
HashMap中元素的key值不能重复,即彼此调用equals方法,返回为false。排列顺序是不固定的。
a、HashMap的常用方法
put—>存放对象;
get(key);—>获取key所对应的数据;
keySet() —> 返回此映射中所包含的键的 set 视图。
b、HashMap的使用
public class HashMapTest {
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王辉");
HashMap map=new HashMap();
map.put(“001", user1);
map.put(“002", user2);
}
}(运行需要创建User类,写有参构造set、get、toString方法)
2、TreeMap
a、TreeMap的常用方法与HashMap类似
b、TreeMap的应用
适用于按自然顺序或自定义顺序遍历键(key);
TreeMap根据key值排序,key值需要实现Comparable接口,实现compareTo方法。TreeMap根据compareTo的逻辑,对 key进行排序
User user1=new User("王敏");
User user2=new User("王辉");
TreeMap tree=new TreeMap();
tree.put(“001", user1);
tree.put(“002", user2);
(根据字符串的字典顺序)
TreeMap排序:
public class ScortInfo implements Comparable {
private int num; public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public int compareTo(ScortInfo o) {
Return new Integer(this.num).compareTo(o.getNum());
}
public ScortInfo(int num) {
this.num = num;
}
}
public class TreeMapTest {
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王辉");
TreeMap tree=new TreeMap();
tree.put(new ScortInfo(12), user1);
tree.put(new ScortInfo(23), user2);
}
}
3、TreeMap和HashMap的遍历
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王辉");
HashMap map=new HashMap();
map.put(“001", user1);
map.put(“002", use2);
Set set=map.entrySet();
Iterator> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next().getValue().getUserName());
}
TreeMap tree=new TreeMap();
tree.put(“001", user1);
tree.put(“002", user2);
Set se=tree.entrySet();
Iterator> iter=se.iterator();
while(iter.hasNext()){
System.out.println(iter.next().getValue().getUserName());
}
}(伪代码)