java基础学习之集合(Collection、Map)

集合与数组

数组长度不可变,在某些情况下需要数组扩容时非常消耗内存,所以引入集合

数组形式:

int[] a = new int[3];
int[] b = new int[]{1,2};
int[] c = {1,2,3};

集合(以ArrayList为例):

ArrayList<Integer> a= new ArrayList();//只能存放引用类型,基本类型需要用对应封装类

Collection(java.util)

子类有:

List接口(有序,可重复)
  1. ArrayList
    底层数据结构是数组,查询快,增删慢
    线程不安全,但效率高
  2. Vector
    底层数据结构是数组,查询快,增删慢
    线程安全,但效率低
  3. LinkedList
    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高
Set接口(无序,不可重复)
  1. HashSet
    底层数据结构是哈希表
    依靠 hashcode()equals() 方法来保证元素唯一不重复
  2. LinkedHashSet(FIFO插入有序,唯一)
    底层数据结构是哈希表和链表
    链表保证有序
    哈希表保证唯一性
  3. TreeSet(唯一,有序)
    底层数据结构是红黑树
    依靠自然排序与比较器排序实现有序
    根据返回值是否是0决定唯一

公共方法

增:public boolean add(E e)
删:public boolean remove(Object obj)
改:无
查:无
其他:

public int size();//返回长度
public boolean contains(Object obj);//若含有obj则返回true
public void clear();//清空集合中的元素
public <T> T[] toArray(T[] t);//将该集合中的元素以数组形式返回
public Iterator iterator();//返回该对象的迭代器

遍历方法及迭代器Iterator

Iterator为java.util下的接口,为方便集合遍历而生

Iterator的方法:
public boolean hasNext();//集合中是否还有元素
public E next();//返回集合里的下一个元素

运用以上方法,集合遍历:

ArrayList<String> str = new ArrayList<String>();
str.add("hello");
str.add("world");
Iterator<String> it = str.iterator();
while(it.hasNext()){
	  System.out.println(it.next());
}

注意:Iterator遍历过程中不允许增删集合元素,否则会引发并发修改异常

Iterator的其他应用:增强for循环
for(E s:str) {//str为存放E类对象的集合
		System.out.println(s);
	}

该for循环过程通过Iterator遍历实现,因此该循环过程同样不能增删集合元素

List(java.util)

特点

有下标
有序性(写入与读取的顺序有序,例写入312,读取时顺序也是312)
可重复

特有公共方法

增:pubic void add(int index,E e);//在指定位置添加元素
删:public E remove(int index);//删除指定下标处的元素并返回被删除的元素
改:public E set(int index,E e);//修改指定下标处的元素并返回修改前的元素
查:public E get(int index);//查询指定下标处的元素并返回
其他:public boolean isEmpty();//判空

实现类方法

ArrayList:与List基本一致
LinkedList:添加了与首尾相关的方法

  1. 增加:
    void addFirst(E e); //在头部添加元素
    void addLast(E e);//在尾部添加元素

  2. 删除:
    E removeFirst();//删除头部元素并返回
    E removeLast();删除尾部元素并返回

  3. 查找
    E getFirst();
    E getLast();

  4. 其他:
    E pop();//删除第一个元素并返回
    void push(E e);//添加一个元素到头部

Set (java.util)

特点

无下标
无序性(除TreeSet和LinkedHashSet外无序)
不可重复

特有公共方法

基本和Collection一致

实现类方法

HashSet和LinkedHashSet基本和Set相同

Map(java.util)

概述

Map是与Collection平行存在的接口,Map中的元素都是成对存在的,以Map<K,V>的形式存储(K,V为泛型),其中K是唯一的,V可重复

常用公共方法:

增:V put(K key,V value);//若key值不存在,则返回null;若存在则返回被替换掉的value
删:V remove(K key);//根据key删除元素,如该key不存在,返回null;否则返回被删除的value
改:V put(K key,V value);根据key修改value,若成功修改则返回原来的value,否则null
查:V get(K key);//根据key返回对应value,若key不存在返回null

实现类:

HashMap(无序)
底层数据结构是哈希表,重写K类的hashCode()和equals()方法保证K的唯一性
LinkedHashMap(有序)
底层数据结构是哈希表和链表,哈希表保证唯一性(重写K类的hashCode()和equals()),链表保证有序性

遍历方法一:keySet()

1.先获取map集合的键的集合,这个集合是一个Set集合
Set keys = map集合.keySet();
2.遍历keys集合
a.foreach b.迭代器
3.在遍历的过程中,从map集合获取键对应的值

//1.创建一个集合
		Map<String, String> map = new LinkedHashMap<String, String>();
		//2.添加键值对
		map.put("aaa", "AAAA");
		map.put("bbb", "BBBB");
		map.put("ccc", "CCCC");
		//3.获取map的键的集合
		Set<String> keys = map.keySet();
		//4.遍历keys这个集合,获取到每一个键
		//4.1迭代器遍历
		Iterator<String> it = keys.iterator();
		while(it.hasNext()){
			 String key = it.next();
			 //根据key 从map集合中查找 对应值
			 String value = map.get(key);
			 //打印
			 System.out.println(key+":"+value);
		}
		//4.2 foreach遍历
		for(String key : keys) {
			System.out.println(key+":"+map.get(key));
		}
遍历方法二:entrySet()

1.获取map集合中所有 结婚证对象
Set<Map.Entry<K,V>> set = map集合.entrySet();
2.遍历这个set集合,获取每一个Map.Entry类型的对象
a.迭代器 b.foreach
3.获取到 Map.Entry类型的对象之后
K key = entry.getKey();
V value = entry.getValue();

//1.创建一个集合
		Map<String, String> map = new HashMap<String, String>();
		//2.添加键值对
		map.put("aaa", "AAAA");
		map.put("bbb", "BBBB");
		map.put("ccc", "CCCC");
		//3.获取所有键值对关系对象的集合
		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		//4.遍历 这个entry集合, 拿出每一个结婚证对象
		//使用迭代器遍历
		Iterator<Map.Entry<String, String>> it = entrySet.iterator();
		while(it.hasNext()){
			Map.Entry<String, String> entry = it.next();
			//获取这个entry中的 键和值
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"="+value);
		}
		//使用foreach
		for (Map.Entry<String, String> entry : entrySet) {
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"="+value);
		}

Properties(java.util)

概述

Properties extends HashTable implements Map<Object,Object>
也是Map集合的一个实现类,但它的键值对类型是固定的String,它也被称为属性集,具有持久化方法

特有方法
public String getProperty(String key);//用指定的键在此属性列表中搜索属性的值,功能和Map中的get是一样
public Object setProperty(String key, String value);//添加键值对,功能和Map的put方法是一样
public Set<String> stringPropertyNames();//和Map中的keySet方法是一样
void store(new FileWriter("文件名"));//保存数据到文件,实际上不是保存到文件 而是写入到流中,由流写到文件
void load(new FileReader("文件名"));//从文件中加载数据,实际上不是直接加载文件,而是加载流中的数据,而流的数据是从该文件中读取的

Collections

public static void shuffle(List list);//打乱顺序
public static void sort(List list);//把List按照自然顺序(123,或ABC)排序
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值