集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
接口:
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Collection保存单一元素,而Map保存相关联的键值对。
一、List接口实现
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
List接口常用方法:
方法名 | 说 明 |
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型, 使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
编写一个用户管理类(UserManager),在类中定义一个Vector或ArrayList的成员变量,该变量保存所有的用户,用户对应的类型为User。在类中定义如下几个方法:
添加一个用户。
删除一个用户。
判断一个用户是否存在。
显示所有用户信息(User对象有toString方法可以显示用户信息)。
User类:有个名字属性、有个toString方法,返回用户信息
package arraylist;
import java.util.*;
public class UserManager {
List users=new ArrayList();
public void addUser(User u) {
users.add(u);
}
public void removeUser(int i) {
users.remove(i);
}
public void removeUser(User i) {
users.remove(i);
}
public boolean isExistUser(User u) {
return users.contains(u);
}
// public void display (){
// for(int i=0;i<users.size();i++) {
// User u=(User)users.get(i);
// System.out.println(u);
// }
// }
public void display() {
Iterator it=users.iterator();//获取集合users的迭代器it
while(it.hasNext()) {//hasnext方法是判断集合中是否有元素
User u=(User)it.next();//next()获取集合中的元素
System.out.println(u);
}
}
public static void main(String[] args) {
UserManager um=new UserManager();
User u1=new User("zhang1");
User u2=new User("zhang2");
User u3=new User("zhang3");
um.addUser(u1);
um.addUser(u2);
um.addUser(u3);
um.display();
um.removeUser(2);
System.out.println("------------------------------");
um.display();
um.removeUser(u1);
System.out.println("------------------------------");
um.display();
}
}
二、LinkedList特殊用法
方法名 | 说 明 |
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
三、Map接口
方法名 | 说 明 |
Object put(Object key, Object val) | 以“键-值对”的方式进行存储 |
Object get (Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove (Object key) | 删除由指定的键映射的“键-值对” |
int size() | 返回元素个数 |
Set keySet () | 返回键的集合 |
Collection values () | 返回值的集合 |
boolean containsKey (Object key) | 如果存在由指定的键映射的“键-值对”,返回true |
编写一个物品信息管理类,在类中定义一个HashMap类型的成员变量,该变量保存物品的信息,HashMap中的key是物品的条形码编号,value是物品对象,类型为Goods。在类中定义如下几个方法:
添加一个物品。
删除一个物品。
根据物品条形码查询一件物品。
修改一个物品信息。
查看所有物品信息(物品对象有toString方法可以显示物品信息)。
package HashMap;
import java.util.*;
public class GoodsManager {
HashMap<String,Goods> goods=new HashMap<String,Goods>();
public void addGoods(Goods g) {
goods.put(g.id, g);
}
public void removeGoods(Goods g) {
goods.remove(g.id);
}
public Goods queryGoods(String id) {
return goods.get(id);
}
public void updateGoods(Goods g) {
goods.put(g.id, g);
}
public void display() {
Collection<Goods> gc=goods.values();
for(Goods c:gc) {
System.out.println(c);
}
}
public static void main(String[] args) {
GoodsManager gm=new GoodsManager();
Goods g1=new Goods("1","apple");
Goods g2=new Goods("2","milk");
Goods g5=new Goods("5","banana");
gm.addGoods(g1);
gm.addGoods(g2);
gm.addGoods(g5);
gm.display();
gm.removeGoods(g5);
gm.queryGoods("3");
gm.updateGoods(g2);
}
}
四、遍历集合
(1)迭代器Itreator
-
获取Iterator :Collection 接口的iterate()方法
-
Iterator的方法
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
List users=new ArrayList();
Iterator it=users.iterator();//获取集合users的迭代器it
while(it.hasNext()) {//hasnext方法是判断集合中是否有元素
User u=(User)it.next();//next()获取集合中的元素
System.out.println(u);
}
(2)增强型for循环
语法:for(元素类型t 元素变量x : 数组或集合对象){
引用了x的java语句
}
例子:
ArrayList<String> users=new ArrayList();
for(String x:users) {
System.out.println(x);
}
ArrayList<User> users=new ArrayList<>();
for(User u:users) {
System.out.println(u);
}
五、泛型集合
泛型就是指参数化类型,也就是说所操作的数据类型被指定为一个参数。
语法:类名<声明自定义泛型>
例子:
ArrayList<String> users=new ArrayList();
ArrayList<User> users=new ArrayList<>();//User为一个类
HashMap<String,String> countries=new HashMap<>();
六、基本数据类型的封装类
byte 的封装类是Byte
short 的封装类是Short
int 的封装类是Integer
long 的封装类是Long
float 的封装类是Float
double 的封装类是Double
char 的封装类是Character
boolean 的封装类是Boolean
Java基本数据类型存储在栈中
封装类实例对象存储在堆中
基本数据类型,数据存储相对简单,运算效率比较高。
集合中的元素要求必须是对象类型,因此需要使用数据类型的封装类。
字符串->其他数据类型
int i1 = Integer.parseInt(“111”);
int i2 = new Integer(“111”).intValue();
int i3 = Integer.valueOf(“111”);
int i4 = new Integer(“111”);
其他数据类型->字符串
String out1 = new Integer(100).toString();
String out2 = String.valueOf(100) ;
String out3 = “”+100;