java常用Collection和Map的继承结构图

1、常用Collection继承结构图及说明:

1.1 哈希表/散列表数据结构

一、关于Collection常用方法:

  (
    新建Collection:
    Collection co1 = new ArrayList();// 多态
    Collection co2 = new LinkedList();// 多态
    Collection co3 = new Vector();// 多态
  )
  1. boolean add(E e) :                                         向集合中添加元素  
  2. boolean addAll(Collection<? extends E> c) :               将指定集合中的所有元素添加到这个集合(可选操作)。  
  3. void clear() :                                            从这个集合中移除所有的元素(可选操作)。  
  4. boolean contains(Object o) :                              返回 true如果集合包含指定元素。底层调用的equals()方法。因此存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。  
  5. boolean containsAll(Collection<?> c) :                    返回 true如果这个集合包含指定集合的所有元素。  
  6. boolean equals(Object o) :                                将指定的对象与此集合进行比较,以进行相等性。  
  7. int hashCode() :                                          返回此集合的哈希代码值。  
  8. boolean isEmpty() :                                       返回 true如果集合不包含任何元素。  
  9. Iterator<E> iterator() :                                  迭代器。迭代器的remove()方法在删除时不会动内存中的集合,集合自带的remove()会实时删除内存中的集合,需要实时更新迭代器才可以。推荐使用迭代器删除  
  10. default Stream<E> parallelStream() :                     返回一个可能并行 Stream与集合的来源。  
  11. boolean remove(Object o) :                               从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。  
  12. boolean removeAll(Collection<?> c) :                     删除此集合中包含的所有元素(可选操作)的所有元素(可选操作)。  
  13. default boolean removeIf(Predicate<? super E> filter) :  删除满足给定谓词的这个集合的所有元素。  
  14. boolean retainAll(Collection<?> c) :                     仅保留包含在指定集合中的这个集合中的元素(可选操作)。  
  15. int size() :                                             返回此集合中的元素的数目。 

二、List常用方法:

  (
    List除了继承了Collection中的方法外,还有一些自己的方法,如get(index)、add(index,Object)。List初始化时预估大小,防止频繁扩容降低效率。
    新建List:
    List co1 = new ArrayList(50);// 默认ArrayList初始化为10,每次扩容添加1.5倍
    List co2 = new LinkedList();// 多态
    List co3 = new Vector();// 默认LinkedList初始化为10,每次扩容添加2倍
  )            
  1.add(int index, E element)                                   在列表中指定的位置上插入指定的元素
  2.get(int index)                                              返回此列表中指定位置的元素。 

三、Set常用方法

  (
    Set除了继承了Collection中的方法外,还有一些自己的方法,如 。
    新建Set,默认初始化容量16,加载因子为0.75:
    Set st1 = new HashSet();// HashSet底层实际上是使用了HashMap中key的原理,无序不重复。哈希表/散列表,是数组和LinkedList优点的集合,其本质是个数组,但其中每个元素是一个个链表,类似于字典查询,判断增删查效率都很高。
                            // 因为在添加元素时会调用HashCode方法生成数组下标,然后调用equals方法判断是否重复,所以在往HashSet中添加实体类的时候,需要重写HashCode和equals方法,否则对比的是两个内存地址。
    SortedSet st2 = new TreeSet()// 无序不可重复,但是存进去的元素可以按照大小自动排序(数值、时间、字符串均可以,因为存储的元素实现了comparable接口)
  )  
  1.hashCode()                                                返回此组的哈希代码值。

应用实例:

     public static void main(String[] args) {
        Collection co = new ArrayList();// 多态
        // List有自己的私有方法,如get(index)、add(index,Object),如果有需要使用到这些方法,应该直接创建List对象。使用时注意初始化大小,避免频繁扩容
        // List ls = new ArrayList();
        // List ls = new LinkedList();//list的多态
        co.add(1);
        co.add(new Integer(100));
        Object o = new Object();
        co.add(o);
        Customer cus = new Customer("Make", 34);
        co.add(cus);// 存储单值,会自动调用toString方法
        System.out.println(co.size());
        System.out.println(co.isEmpty());
        Object[] objs = co.toArray();
        for (Object obj : objs) {
            System.out.println("obj>>" + obj);
        }

        // 迭代、遍历,获取迭代器对象。不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator接口
        Iterator it = co.iterator();// 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的“迭代器对象”
        // while写法
        while (it.hasNext()) {
            // it.next()将迭代器向下移动一位,并去除指向的元素,初始时it不指向元素,调用next()时指向第一个元素,调用next()之前,必须调用hasNext()
            System.out.print("itItem>>" + it.next() + "; ");
        }
        System.out.println();
        // for写法
        for (Iterator it2 = co.iterator(); it2.hasNext();) {
            Object element = it2.next();
            System.out.print("element>>>" + element + "; ");
        }
        System.out.println();
        co.clear();
        System.out.println(co.size());
        System.out.println(co.isEmpty());
    }

    static class Customer {
        String name;
        int age;
        Customer(String name, int age) {
            this.age = age;
            this.name = name;
        }
        // 重写toString()
        public String toString() {
            return "Customer[name = " + name + ", age = " + age + "]";
        }
        // equals(E)方法。
            // contains(o)比较:自己创建的对象,对比两个内容相同对象,
            // 对象没重写equals(o)方法则对比的是对象的内存地址,结果不会返回true。
            // 而集合对象内部的比较已经重新了equals方法
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o instanceof Customer) {
                Customer c = (Customer)o;
                if (c.age == this.age && c.name.equals(this.name)) {
                    return true;
                }
            }
            return false;
        }
    }

2、常用Map继承结构图及说明:

一、Map简单介绍
创建如:Map p = new HashMap();

方法说明
void clear()清空
Object remove(Object key)通过key值移除一个键值对
boolean remove(Object key, Object value)仅当它当前映射到指定的值时,为指定的键移除条目
int size()返回这个映射中的键值映射的数目
boolean isEmpty()是否为空
Object put(Object key, Object value)插入键值对
Object get(Object key)返回key值对应的value
boolean containsKey(Object key)判断Map是否包含一个指定key
boolean containsValue(Object value)判断Map是否包含一个指定value
Collection values()获取Map中所有的value集合
Set keySet()获取Map中所有的key集合
Set entrySet()返回一个 Set视图的映射包含在这个Map

二、Properties简单介绍
创建如:Properties p = new Properties();

方法说明
String getProperty(String key)返回key值对应的value
Object setProperty(String key, String value)插入键值对,key和value均为字符串

IO+Properties结合简例

/**
 * IO+Properties
 * dataBase.properties这样的文件称作配置文件,其作用就是使程序更加灵活
 * 
 * 注意:一般在程序中可变的东西不要写死,推荐写到配置文件中,可以运行相同代码产生不同结果
 * 
 * 属性文件在java规范中要求以“.properties”作为后缀
 * 
 * 属性文件格式要求:
 *      key和value之间可以使用“空格”、“冒号”、“等号”。
 *      如果“空格”、“冒号”、“等号”都有,按最前的作为分隔符
 * 
 * tip:在cmd.exe中native2ascii命令可以将中文转换为Unicode码,属性文件中中文使用Unicode码可以解决乱码的情况
 */
public class IOAndProperties {
    public static void main(String[] args) throws IOException {
        // 1、创建属性对象
        Properties ps = new Properties();// 和Map一样,只不过key和value只能存储字符串类型
        // 2、创建输入流
        FileInputStream is = new FileInputStream("E:\\learing\\temporary\\dataBase.properties");// username=name
                                                                                                // password=123456
        // 将is流中的所有数据加载到属性对象中,其结果是一组组键值对
        ps.load(is);
        // 关闭流
        is.close();
        // 通过getProperty(K)方法,使用key值获取value,
        System.out.println("username>>>" + ps.getProperty("username"));
        System.out.println("password>>>" + ps.getProperty("password"));
    }
}

三、SortedMap简单介绍
说明:SortedMap中的key,无序不可重复,但是存进去的元素可以按照大小自动排列,如想自动排序,key部分需要实现Comparable接口,还要单独有个比较器。
创建如:SortedMap t = new TreeMap();

注意:
1、储在Map集合key部分的元素需要同时重写hashCode和equals方法1
2、HashMap默认初始化容量16,默认加载因子为0.75
3、HashTable默认初始化容量16,默认加载因子为0.75/
4、Properties也中key、value都是由字符串组成
5、Collections是一个工具类,可以用于对list排序等,而Collection是一个接口类。Collections的sort()方法仅对实现了comparable接口的有效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值