文章目录

数组:就是一种集合
数组的明显缺点:大小是固定的,不可变的
集合框架的基本结构:
Collection 接口
可以存放对个元素的容器,这就是集合
有的集合是有序的,有的集合是无序的
有的集合允许重复元素,有的集合不允许有重复元素
Collection接口和Collections类有啥区别?
1 Collection是一个接口规定了集合的基本操作
2 Collections 是一个类,主要来操作集合的
List 接口
列表:有序的
实现类:
ArrayList 类
是list接口的大小可变数组的实现
是list接口的实现类
底层是数组,大小可变
public static void main(String[] args) {
//定义数组
int [] arr = new int[5];
//这里的<>是用来指定元素的类型,这个东西叫泛型
ArrayList<String> list = new ArrayList<String>();
//这是就创建了一个长度为0的list
//添加元素
list.add("java");
list.add("mysql");
list.add(0, "c++");
System.out.println(list);
//删除元素
list.remove(0);//删除指定下标的元素
list.remove("java");
System.out.println(list);//删除指定的元素
//如果是一个存放了整数的List
//泛型不能使用基本类型
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(5);
//删除5
list1.remove(4);
list1.remove(new Integer(5));//删除下标
list1.remove(new Integer(5));//指定5删除
System.out.println(list1);
System.out.println(list1.size());//输出长度
//替换
list1.set(0, 100); //替换指定下标的元素
System.out.println(list1);
//清楚所有元素
list1.clear();
System.out.println(list1);
}
LinkedList 类
是list接口的实现类
底层采用的是链表
操作和ArraysList一样
ArraysList与LinkedList的区别
1 底层采用的方式不同 ArraysLIst是数组 LinkedList是链表
2 ArraysList元素查找要快,添加删除慢;
LinkedList元素查找要慢,添加删除快;
Vector类
Vector类和ArrayList基本一样
Vector是线程安全的,是同步的
List是一个有序的集合,因此可以用下标访问元素
get(index) 通过下标来访问元素;
Set 接口
HashSet 类
无序的,允许使用空值null
public class Demo05 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
//添加
set.add("java");
set.add("mysql");
set.add("c++");
set.add(null);
System.out.println(set.size());
set.add("java");//集合中元素已经存在,添加失败返回false
System.out.println(set.size());
}
TreeSet类
可以排序,使用基本一样
Map(mapping 映射) 接口
映射 :A->B
Map接口中的元素必须是一对键值(Key–Value)
可以从集合中,根据Key找到它对应的Value
HashMap
不同步,可以使用空值,空键
public static void main(String[] args) {
//创建对象
HashMap<String, Integer> map = new HashMap<String, Integer>();
//添加元素
map.put("仝贺", 22);
map.put("tom", 18); //(键,值)tom和18形成了一个映射关系,被放到了map中
//取出元素
System.out.println(map.get("tom"));//用map.get方法,通过键取值
//移除键值对
map.remove("仝贺");
System.out.println(map.size());//判断,map的长度看是否移除
}
HashTable
同步的,不可以使用空值,空键
集合的遍历
List集合
1 循环下标
2 Foreach (基于迭代器)
3 使用迭代器 Iterator
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("java");
list.add("ps");
list.add("mysql");
list.add("c++");
//迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()) {//it.hasNext()是否存在下一个,存在循环执行
String s = it.next();//取出迭代器下一个元素
System.out.println(s);
}
Set集合
不能循环,使用Foreach,使用迭代器
map集合
不能使用循环
1 先将键/值对,生成一个set,然后再遍历
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("仝贺", 22);
map.put("tom", 18);
map.put("java", 20);
map.put("jing", 19);
//遍历
Set<String> keys = map.keySet();//取出所有的键
for (String key : keys) {
System.out.println(key + "-->"+ map.get(key));
}
Collection<Integer>values = map.values();
for (Integer value :values) {
System.out.println(value);
}