Java基础知识点【一】

最近有点时间,把一些基础整理一下,防止长时间没用忘了。。。



一、集合框架

概述:

集合类是高级容器,专门用于存储对象,长度可变。

所有相关的类和接口都在java.util包中

集合框架主要分为三大分支:

列表(List)、集合(Set)、映射(Map)

特点:

  1. 长度可变
  2. 用于存储对象,不可以存储基本数据类型

集合框架和数组的区别:

  1. 数组的大小是固定的,而集合的大小是可变的
  2. 数组可以存储基本数据类型,也可以存储引用数据类型类型,而集合只能存储对象

集合容器由于内部可以存在多种数据结构,所以有多种具体容器,将容器共性内容不断向上抽取,就形成了集合容器

Collection接口:

常用方法:

添加:

  • add(Object o):添加一个对象
  • addAll(Collection c):添加一个集合中的所有对象

删除:

  • remove(Object o):删除指定对象
  • removeAll(Collection c):删除两个集合中共有对象
  • clear():清空集合

判断:

  • contains(Object o):判断集合中是否存在指定对象
  • containsAll(Collection c):判断当前集合中是否包含指定集合中的所有对象
  • isEmpty():判断集合是否为空

获取:

  • size():获取集合中的对象数量
  • iterator():获取迭代器对象
  • toArray():获取当前集合中所有集合的数组

其他:retainAll(Collection c):保留两个集合中相同的对象(取交集)

子接口:

  • List:有序的集合(存入和取出的顺序是一样的),元素可以重复
  • Set:无序的集合(其实现类型存在特殊情况),元素不可重复

List接口:

  • 概念:List是有序的集合,元素可以重复
  • List接口继承自Collection接口,具备Collection接口中的所有方法
  • List接口中的特有方法(有一个共同的特征,都是在操作下标)
  1. 添加
    • add(int index,Object o):在指定位置插入一个对象
    • addAll(int index,Collection c)在指定位置插入指定集合中的所有对象
  2. 删除
    • remove(int index):删除指定位置上的对象
  3. 修改
    • set(int index,Object o):用指定对象替换原列表中指定位置的对象
  4. 获取
    • get(int index):获取指定位置上的对象
    • indexOf(Object o):获取指定对象在集合中第一次出现的下标
    • lastIndexOf(Object o):获取指定对象在集合中最后一次出现的下标
    • subList(int start,int end):获取子列表
    • listIterator():获取列表迭代器

List接口的常见子类:

  • ArrayList:内部数据结构是数组,线程不同步
  • LinkedList:内部数据结构是链表,线程不同步
  • vector:内部数据结构是数组,线程同步,已被ArrayList替代

ArrayList和LinkedList有什么不同:

  • 底层实现原理不同,ArrayList底层是基于数组实现的,而LinkedList底层是基于链表实现的
  • ArrayList更适合对元素执行查询操作,而LinkedList更适合对元素执行增加、删除等操作

Set集合:

概念:Set是无序的集合,元素不可以重复

Set继承自Collection中所有的接口,具备Collection中所有的方法,没有特殊方法

Set接口的常见子类:

  • HashSet:内部数据结构是哈希表,线程不同步
    • 存入对象的时候会先先通过hashCode()方法计算对象的哈希值
    • 根据哈希值找到对应的存储位置
      • 如果位置上没有元素,就直接存入
      • 如果位置上有元素,就通过调用equals()方法进行判断
        1. 如果equals()返回true,代表对象“相等”,就不存
        2. 如果equals()放回false,代表对象“不相等”(哈希冲突),会通过算法解决哈希冲突后将数据存入集合中
  • TreeSet:内部结构是二叉树,线程不同步,对集合中的对象进行了排序(自然排序)
    • 数据结构:二叉树(红黑树,是一个自平衡的二叉树)
    • 二叉树的操作原理
      1. 存储数据:先和根节点比较大小,如果一样大就不存,如果比节点小,就往左边树,如果打就往右边树,然后再反复进行比较,直到找到合适的位置
      2. 遍历数据:中序遍历:先访问中间节点,再访问左、右节点

Comparable和Comparator接口:

  • Comparable接口:是一个具备比较方法的接口,实现该接口的类就具备了比较大小的能力,可以通过接口中compareTo(T o)方法与其他对象进行比较
  • Comparator接口:是一个比较器接口,实现了该类的接口就是一个比较器类,可以通过接口中的compare(T o1, T o2)方法比较两个指定对象的大小
  • PS:comparable接口是让类本身具备比较大小的能力,而Comparator接口是单独定义一个比较器,独立于参与比较的对象之外,用于比较两个对象的大小(因为比较器中定了比较规则,所以此时对象本身不需要具备比较大小的能力)。
  • 下面放个简单的测试Demo:
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class CollectionSortDemo {
    
    	/**
    	 * @Description:
    	 * @param args
    	 * @return void    
    	 * @author Libra丶X
    	 * @date 2016-11-11 上午9:35:25
    	 */
    	public static void main(String[] args) {
    		// 集合排列演示
    		/**
    		 * 需求:List对象中存放多个Person对象(此对象包含名字、年龄)
    		 * 按Person的年龄大小进行排序,假设年龄大小相等,再按名字大小来排序,求出年龄最大的那个学生的信息
    		 */
    		List<Person> list = new ArrayList<Person>();
    		list.add(new Person("xiangdong", 18));
    		list.add(new Person("xiaonan", 18));
    		list.add(new Person("wangcai", 30));
    		list.add(new Person("laifu", 50));
    		list.add(new Person("xiaoming", 30));
    		
    		Collections.sort(list);
    		/*Collections.sort(list, new Comparator<Person>(){
    
    			@Override
    			public int compare(Person o1, Person o2) {
    				// TODO Auto-generated method stub
    				return o1.name.compareTo(o2.name);
    			}
    			
    		});*/
    		for (Person person : list) {
    			System.out.println(person);
    		}
    	}
    	
    static class Person implements Comparable<Person>{
    	String name;
    	int age;
    	
    	public Person(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    
    	@Override
    	public int compareTo(Person o) {
    		// TODO Auto-generated method stub
    		return this.age-o.age;
    	}
    }
    }


Map集合:

概念:

  • Collection是单列集合,一次存储一个对象
  • Map是双列集合,一次存储俩个对象,以键值对的形式存储,并且保证键的唯一性(不可重复),但是值可以重复

Map集合中的方法:

  • 增加
    • put(Object key, Object value):添加一组键值对,如果键已存在,则替换原有的值
    • putAll(Map m):将指定的Map集合中的所有键值对添加到当前Map集合中
  • 删除
    • remove(Object key):将指定的键值对删除
    • clear():清空集合
  • 判断
    • containsKey(Object key):判断是否包含指定的键
    • containsValue(Object value):判断是否包含指定的值
    • isEmpty():判断是否为空
    • equals(Object o):判断存储的元素是否相同
  • 获取
    • get(Object key):通过键取值
    • keySet():获取该集合中所有的键的Set集合(保证元素唯一)
    • values():获取该集合中所有的值的Collection集合(元素可重复)
    • Set<Map.Entry<K,V>> entrySet():获取该集合中所有键值对(Entry)的Set集合

遍历Map集合中的元素:

  1. 通过keySet()方法获取所有键的集合,通过键获取值
  2. 通过entrySet()方法获取所有键值对的集合
  3. 通过valuse()方法获取所有值的集合,但是只能访问map集合中的所有值
  4. PS:Map集合中没有迭代器,不能使用迭代器来遍历map集合,所以也能用foreach循环来遍历Map集合

Map接口的常见子类:

  • HashMap:内部数据结构是哈希表,线程不同步
  • TreeMap:内部数据结构是二叉树,线程不同步
  • Hashtable:内部数据结构是哈希表,线程同步,被HashMap替代

Collection和Collections的区别:

  • Collection是集合框架中的一个顶层接口,其中封装了对集合操作的基本方法,它的常用子接口有List和Set
  • Collections是一个工具类,其中包含了许多对集合中对象操作的静态方法,比如对于集合的查询和排序等操作





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值