JAVA 泛型与常见的数据结构和集合

泛型与常见的数据结构和集合


集合&迭代器

  集合体系结构图

  由于不同的数据结构(数据的组织,存储方式),所以java为我们提供了不同的集合

  不同的集合他们的功能都是相似的,不断向上提取,将共性抽取出来

Collection中的常用功能

boolean add(Object e): 向集合中添加元素
void clear():清空集合中所有元素
boolean contains(Object o):判断集合中是否包含某个元素
boolean isEmpty():判断集合中的元素是否为空
boolean remove(Object o):根据元素的内容来删除某个元素
int size():获取集合的长度
Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中

collections

Collection和Collections有什么区别?

    Collection是集合体系的最顶层,包含了集合体系的共性

    Collections是一个工具类,方法都是用于操作Collection

static void swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换
static void  sort(List<T> list) :按照列表中元素的自然顺序进行排序
static void shuffle(List list):随机置换
static void reverse(List list)  :反转
static void fill(List list, Object obj) :使用指定的对象填充指定列表的所有元素
static void copy(List dest, List src) :是把源列表中的数据覆盖到目标列表,注意:目标列表的长度至少等于源列表的长度
static int  binarySearch(List list, Object key) 使用二分查找法查找指定元素在指定列表的索引位置

List接口(有序,可空值,可重复)

  特有功能:

void add(int index, E element) :将元素添加到index索引位置上
E get(int index) :根据index索引获取元素
E remove(int index) :根据index索引删除元素
E set(int index, E element):将index索引位置的的元素设置为element

  LinkedList特有功能

LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
void addFirst(E e) :向链表的头部添加元素
void addLast(E e):向链表的尾部添加元素
 E getFirst():获取链头的元素,不删除元素
 E getLast():获取链尾的元素,不删除元素
 E removeFirst():返回链头的元素并删除链头的元素
 E removeLast():返回链尾的元素并删除链尾的元素

List的常用子类:

*      ArrayList

*          底层是数组结构,查询快,增删慢

*      LinkedList

*          底层结构是链表,查询慢,增删快


Set接口(无序,可空值,不允许重复,没有索引)

  Set集合的特点: 无序,可空值,不允许重复,没有索引

    因为Set是一个接口所以不能直接实例化对象

Set<String> set = new HashSet<String>();

    该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。

Set的常用子类:

  HashSet:底层数据结构是哈希表

新添加到HashSet集合的元素都会与集合中已有的元素一一比较

首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值)

如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合

如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较

如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合

如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合

  TreeSet:底层数据结构是红黑树


Collection总结

如果你知道是Set,但是不知道是哪个Set,就用HashSet。
                    查询多:ArrayList
                    增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。

如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList。

迭代器

集合的遍历方式:

1.toArray(),可以把集合转换成数组,然后遍历数组即可

2.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合

    private static void method2() {
        Collection c = new ArrayList();
        c.add("hello");
        c.add("world");
        Iterator it = c.iterator();

        while (it.hasNext()){
            System.out.println(it.next());
        }
    Object next(): 返回下一个元素 boolean hasNext():判断是否有元素可以获取

  注意:迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常


foreach & 泛型

由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,

* 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型

*

* 泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点

* 泛型好处:

*          避免了类型转换的问题

*          可以减少黄色警告线

*          可以简化我们代码的书写

foreach:增强for循环,一般用于遍历集合或者数组

* 格式:

*      for(元素的类型 变量 : 集合或者数组对象) {

*          可以直接使用变量;

*      }

注意:在增强for循环中不能修改集合,否则会出现并发修改异常。

原文地址:https://www.cnblogs.com/viperqy/p/11369748.html

时间: 2024-08-04 20:31:55

JAVA 泛型与常见的数据结构和集合的相关文章

Java泛型再学习

泛型是对于数据的一种规范,他限定了类.容器.方法可以接受的参数类型,避免参数类型混乱. 一.基本泛型 泛型最常见的地方就是集合,如: -- ArrayList<String>  表示这个集合中只能存放String类型的元素 -- HashMap<String, Object>  表示这个图中只能存放键为String类型,值为Object类型的元素 特别要注意的时,泛型只存在于编译阶段,在程序运行阶段,我们定义的泛型是并不存在的,这种方案叫“擦除”,示例: 1 public clas

第10篇-JAVA 集合框架-JAVA 泛型

第10篇-JAVA 集合框架-JAVA 泛型 每篇一句 :所有的不甘,都是因为还心存梦想 初学心得: 不是每件事都注定会成功,但是每件事都值得一试 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-15| JAVA 集合框架/JAVA 泛型 ] 1.JAVA 集合框架概念 通俗的说,集合就是一个存放数据的容器,准确的说,就是放数据对象引用的容器 数组和集合都是容器,有何不同? 数组长度固定,集合长度可变 数组只能存放相同类型的数据,集合可以存放不同类型的数据 数组可存放简单数据

《码出高效 Java开发手册》第六章 数据结构与集合

码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据结构 1. 数据结构定义: 数据结构是指逻辑意义上的数据组织方式及其相应的处理方式; 1.1. 数据组织方式: 树: 二叉树, 三叉树, B+ 树等; 图: 有向图, 无向图; 队列: 先进先出的线性结构; 哈希: 根据某种算法直接定位的数据组织方式; 1.2. 数据处理方式: 在既定的数据组织方式

Java 中常见的数据结构

1.数据结构有什么作用? 当使用 Java 里面的容器类时,你有没有想过,怎么 ArrayList 就像一个无限扩充的数组,也好像链表之类的.很好使用,这就是数据结构的用处,只不过你在不知不觉中使用了. 数据结构内容比较多,细细的讲解也是相对费功夫的,不可能达到一蹴而就.我就将常见的数据结构:堆栈.队列.数组.链表和红黑树 给大家介绍一下,作为数据结构的入门,了解一下它们的特点即可. 2.常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 栈 栈:stack,又称堆栈,它是运算

四种常见的数据结构、LinkedList、Set集合、Collection、Map总结

四种常见的数据结构:    1.堆栈结构:        先进后出的特点.(就像弹夹一样,先进去的在后进去的低下.)    2.队列结构:        先进先出的特点.(就像安检一样,先进去的先出来)    3.数组结构:        查找元素快,但是增删元素慢    4.链表结构:        增删元素快,但是查找元素慢 LinkedList:(List接口下的一个子类,和ArrayList是同级别关系)    1.底层是链表结构    2.它的一些特有方法:        addFir

java 16 - 5 LinkedList模拟栈数据结构的集合

请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. 1 package cn_LinkedList; 2 3 import java.util.LinkedList; 4 5 6 7 8 public class MyStack { 9 10 //定义一个LinkedList类的成员变量 11 private LinkedList list = null; 12 13 /** 14 * 构造方法 15

Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)

1. 请用LinkedList模拟栈数据结构的集合,并测试:  题目的意思是:     你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟,使用LinkedList功能方法封装成自己的方法. 2. 代码解析: (1)定义自己集合类MyStack,模拟栈数据结构( 先进后出 ) 1 package cn.itcast_05; 2 3 import java.util.LinkedList; 4 5 /** 6 * 自定义的栈集合 7 * 8 * @author Mr He 9

java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

//Sets.java package org.rui.generics.set; import java.util.HashSet; import java.util.Set; /** * 一个Set有用工具 * @author lenovo * */ public class Sets { public static<T> Set<T> union(Set<T> a,Set<T> b) { Set<T> result=new HashSet&

一、javaSE (十七)set集合、Collection集合、针对Collection集合我们到底使用谁、在集合中常见的数据结构

1:set集合(理解) (1)Set集合的特点 无序,唯一 (2) Hashset集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法: hashCode()和equals() 执行顺序 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回fa1se:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由 hashcode()和equals()保证的 D:开发的时候,代码非常的简单