集合框架包括集合与映射(Collection and Map), 以及它们的子类(容器类)
1) List 元素有先后次序的集合, 元素有index位置, 元素可以重复,继承自Collection接口,
? 实现类: ArrayList, Vector, LinkedList
2) Set 元素无续, 不能重复添加, 是数学意义上的集合, 继承自Collection 接口
? 实现类: HashSet(是一个只有Key的HashMap)
3) Collection 集概念, 没有说明元素是否重复和有序, 使用集合的跟接口, 很少直接使用
其他集合都是实现类: ArrayList, HashSet
4) Map 描述了(key:value)成对放置的集合,key丌重复,Value可以重复(key重复算一 个)
Collection接口 表示集合的概念
List接口
Set接口
List接口 表示有序线性表的概念
ArrayList 底层实现是数组
LinkedList 底层实现是链表
Set接口 表示无序不重复的概念
HashSet
注意
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
List
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
书籍管理系统中
采用LinkedList对书籍增加删除操作
修改和查找书籍使用ArrayList
例子1:
Student(String name,int age){
this.name=name;
this.age=age;
}
Student stu1=new Student("张三", 15);
Student stu1=new Student("张三",15);
Student stu2=new Student("李四",15);
Student stu3=new Student("王五",15);
Student stu4=new Student("测试",15);
List<Student> list=new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
System.out.println(list.size());
例子2:
Student s=(Student)list.get(i);------报错,强制转换为Student类型,如果使用泛型规定好类型,就不需要强制转换
把任何类型对象通过add(Object obj) 放入List中,认为只是Object类型
通过get(int index) 取出List中元素时必须进行强制类型转换,繁琐而且容易出现异常
使用Map的put(Object key, Object value)和get (Object key)存取对象时存在同样问题
JDK5.0中通过引入泛型有效的解决了这个问题
JDK5.0使用泛型改写了集合框架中的所有接口和类
例子3:
打印出存储在Student的list中的学生姓名
清空集合list.clear();
删除指定位置的学生,如第一个list.remove(index); list.remove(object);
删除指定的学生,如删除张三对象
循环中找到姓名为张三的对象
判断集合中是否包含指定
list.contains(object)
在指定位置添加对象
list.add(1, stu4);
插入、删除操作频繁时,可使用LinkedList来提高效率
LinkedList还额外提供对头部和尾部元素进行添加和删除操作的方法
例子1
LinkedList<Student> list=new LinkedList<Student>();
list.add(stu1);
list.add(stu2);
list.addFirst(stu3);
list.addLast(stu4);
例子2
删除头处
list.removeFirst(); list.removeLast();--删除尾部
list.getFirst().getName()--获得首部
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
最常用的实现类是HashMap
例子1:添加
Map<String, String> countries =new HashMap<String, String>();
countries.put("四川", "成都");
countries.put("四川", "绵阳");
countries.put("四川", "宜宾");
countries.put("四川", "乐山");
例子2:
获得指定元素的值
String address=countries.get("四川");
System.out.println(address);
这时候只会打印乐山-----被覆盖了(key,value)
例子3:
countries.size()-----获得map里边元素的个数
countries.remove()----删除指定元素
countries.containsKey()
countries.keySet()----获得所有map里边的key
countries.values()----获得所有map里边的value
Vector和ArrayList的异同
实现原理相同,功能相同,很多情况下可以互用
两者的主要区别如下
Vector线程安全,ArrayList重速度轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%
Hashtable和HashMap的异同
实现原理相同,功能相同,在很多情况下可以互用
两者的主要区别如下
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值,HashMap允许null值
元素遍历·
所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历
Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
Iterator it = dogs.iterator();
while (it.hasNext()) {
Student stu= it.next();
System.out.println(stu.getName()+"\t"+stu.getStrain());
}
1) List 元素有先后次序的集合, 元素有index位置, 元素可以重复,继承自Collection接口,
? 实现类: ArrayList, Vector, LinkedList
2) Set 元素无续, 不能重复添加, 是数学意义上的集合, 继承自Collection 接口
? 实现类: HashSet(是一个只有Key的HashMap)
3) Collection 集概念, 没有说明元素是否重复和有序, 使用集合的跟接口, 很少直接使用
其他集合都是实现类: ArrayList, HashSet
4) Map 描述了(key:value)成对放置的集合,key丌重复,Value可以重复(key重复算一 个)
Collection接口 表示集合的概念
List接口
Set接口
List接口 表示有序线性表的概念
ArrayList 底层实现是数组
LinkedList 底层实现是链表
Set接口 表示无序不重复的概念
HashSet
注意
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
List
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
书籍管理系统中
采用LinkedList对书籍增加删除操作
修改和查找书籍使用ArrayList
例子1:
Student(String name,int age){
this.name=name;
this.age=age;
}
Student stu1=new Student("张三", 15);
Student stu1=new Student("张三",15);
Student stu2=new Student("李四",15);
Student stu3=new Student("王五",15);
Student stu4=new Student("测试",15);
List<Student> list=new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
System.out.println(list.size());
例子2:
Student s=(Student)list.get(i);------报错,强制转换为Student类型,如果使用泛型规定好类型,就不需要强制转换
把任何类型对象通过add(Object obj) 放入List中,认为只是Object类型
通过get(int index) 取出List中元素时必须进行强制类型转换,繁琐而且容易出现异常
使用Map的put(Object key, Object value)和get (Object key)存取对象时存在同样问题
JDK5.0中通过引入泛型有效的解决了这个问题
JDK5.0使用泛型改写了集合框架中的所有接口和类
例子3:
打印出存储在Student的list中的学生姓名
清空集合list.clear();
删除指定位置的学生,如第一个list.remove(index); list.remove(object);
删除指定的学生,如删除张三对象
循环中找到姓名为张三的对象
判断集合中是否包含指定
list.contains(object)
在指定位置添加对象
list.add(1, stu4);
插入、删除操作频繁时,可使用LinkedList来提高效率
LinkedList还额外提供对头部和尾部元素进行添加和删除操作的方法
例子1
LinkedList<Student> list=new LinkedList<Student>();
list.add(stu1);
list.add(stu2);
list.addFirst(stu3);
list.addLast(stu4);
例子2
删除头处
list.removeFirst(); list.removeLast();--删除尾部
list.getFirst().getName()--获得首部
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
最常用的实现类是HashMap
例子1:添加
Map<String, String> countries =new HashMap<String, String>();
countries.put("四川", "成都");
countries.put("四川", "绵阳");
countries.put("四川", "宜宾");
countries.put("四川", "乐山");
例子2:
获得指定元素的值
String address=countries.get("四川");
System.out.println(address);
这时候只会打印乐山-----被覆盖了(key,value)
例子3:
countries.size()-----获得map里边元素的个数
countries.remove()----删除指定元素
countries.containsKey()
countries.keySet()----获得所有map里边的key
countries.values()----获得所有map里边的value
Vector和ArrayList的异同
实现原理相同,功能相同,很多情况下可以互用
两者的主要区别如下
Vector线程安全,ArrayList重速度轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%
Hashtable和HashMap的异同
实现原理相同,功能相同,在很多情况下可以互用
两者的主要区别如下
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值,HashMap允许null值
元素遍历·
所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历
Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
Iterator it = dogs.iterator();
while (it.hasNext()) {
Student stu= it.next();
System.out.println(stu.getName()+"\t"+stu.getStrain());
}