Java SE 修炼手册之数据类型和集合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hadues/article/details/101781483


这篇博文来聊聊 Java 基础中数据类型和集合的那些事。

在虚拟的网络世界中,流传着这么一句话: 程序= 数据结构+ 算法

1. 数据结构和集合

作为初学者的我们也许会好奇到底什么是数据结构呢?

提起数据结构,学过数学的都知道,一个集合由许多个元素组成。

如果一个集合中由多个数字组成,那么在我们的脑海中潜意识可能会出现这样的图:
在这里插入图片描述
为了用计算机语言描述这样的集合(数据结构),在java中是这样描述的:

 int[] a={0,1,2,3,4,5,6,7,8,9};

再比如,一个集合中由A,B,C,D,E,F,G多个字符串元素组成,那么在我们的脑海中潜意识可能会出现这样的图:
在这里插入图片描述

String[] myStringArray={"A","B","C","D","E","F","G"};

综上可以发现,一个集合中的元素可能由不同的数据类型组成。

为了更好地使用和描述这些集合,Java将具有不同类型元素和集合(数据结构是集合的表现形式)都封装成了各种各样的对象。

2. Java中的基本数据类型和包装类型

Java中有8种基本数据类型,如下表所示:

类型名称 默认值 大小 包装类 缓存区间
boolean false 1B Boolean
byte (byte)0 1B Byte -128~127
char ‘\u0000’ 2B Char (char)0~(char)127
short (short)0 2B Short -128~127
int 0 4B Integer -128~127
long 0L 8B Long -128~127
float 0.0f 4B Float
double 0.0d 8B Double
  • 集合中不同类型的元素使用不同的基本类型来表示
  • 各种不同的数据类型代表不同的数据结构。

3. Java中的数组

关于Array(数组)我们需要知道的几点:

  • 数组是一种顺序表
  • 数组的下标从0开始
  • 数组的容量大小是固定的

如果需要动态大小的数组,则可以使用Java提供的 VectorArrayList集合类。

Vector 是线程安全的,但是性能较差,基本弃用。

3.1 数组的静态初始化

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
    }
}

3.2 数组的动态初始化

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray=new String[7];
        myStringArray[0]="A";
        myStringArray[1]="B";
        myStringArray[2]="C";
        myStringArray[3]="D";
        myStringArray[4]="E";
        myStringArray[5]="F";
        myStringArray[6]="G";
    }
}

3.3 数组的遍历

3.3.1 for i 循环遍历

如果需要使用数组下标可以使用for (int i = 0; i < myStringArray.length; i++) 的方式

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
        for (int i = 0; i < myStringArray.length; i++) {
            System.out.println(myStringArray[i]);
        }
    }
}

注意数组中length是数组对象的一个属性而不是方法。

输出内容如下:

A
B
C
D
E
F
G

3.3.2 foreach循环遍历

数组的遍历优先推荐JDK5引进的foreach方式,即,for(元素:数组名)的方式,可以在 不使用游标的情况下遍历数组。

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
        for (String s:myStringArray
             ) {
          System.out.println(s);  
        }
    }
}

输出内容如下:

A
B
C
D
E
F
G

3.3.3 JDK 8 函数式接口 forEach 循环遍历

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
        Arrays.stream(myStringArray).forEach(System.out::println);
    }
}

输出内容如下:

A
B
C
D
E
F
G

3.3.4 JDK 8 函数式接口 forEachOrdered 循环遍历

代码示例如下:

public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
        Arrays.stream(myStringArray).forEachOrdered(System.out::println);
    }
}

输出内容如下:

A
B
C
D
E
F
G

3.4 数组工具类 Arrays

Arrays是Java JDK 提供的一个针对数组对象进行操作的工具类,包括数组的排序,查找,对比,拷贝等操作。

尤其是排序,JDK版本演进中,排序性能得到了很大的提高,早期的归并排序算法优化成了Timsort排序算法。

另外,我们也可以通过这个工具类将数组转换成集合。

3.4.1 数组转集合

数组转集合,代码示例如下:

import java.util.Arrays;
import java.util.List;

/**
 * @author 星云
 */
public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};
        
        List<String> stringList= Arrays.asList(myStringArray);
    }
}

Arrays.asList 体现的是适配器模式,后台数据仍是原有数组

3.4.2 集合转数组

代码示例如下:

import java.util.ArrayList;
import java.util.List;

/**
 * @author 星云
 */
public class MainTest {
    public static void main(String[] args) {
       List<String> myStringList=new ArrayList<>(7);
       myStringList.add("A");
       myStringList.add("B");
       myStringList.add("C");
       myStringList.add("D");
       myStringList.add("E");
       myStringList.add("F");
       myStringList.add("G");

       String[] myStringArray=myStringList.toArray(new String[myStringList.size()]);
    }
}

3.4.3 数组的复制

数组之间进行复制,使用方法示例如下:

import java.util.Arrays;

/**
 * @author 星云
 */
public class MainTest {
    public static void main(String[] args) {
        String[] myStringArray={"A","B","C","D","E","F","G"};

        String[] currentStringArray= Arrays.copyOf(myStringArray,myStringArray.length);
    }
}

4. Java中的集合

数组和集合都是用来存储对象的容器。

如果需要动态大小的数组,则可以使用Java提供的 Vector 和ArrayList集合类。

Vector 是线程安全的,但是性能较差,基本弃用。

Java中集合主要分为如下四大类型:

  • List
    • ArrayList 插入删除 慢,随机访问快
    • LinkedList 插入删除快,随机访问慢
  • Map
    • HashMap(线程不安全)
    • ConcurrentHashMap(线程安全)
    • TreeMap (Key有序)
  • Set
    • HashSet
    • TreeSet
    • LinkedHashSet
  • Queue
    • BlockingQueue (阻塞队列)

猜你喜欢

转载自blog.csdn.net/hadues/article/details/101781483