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


这篇博文来聊聊 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种基本数据类型,如下表所示:

类型名称默认值大小包装类缓存区间
booleanfalse1BBoolean
byte(byte)01BByte-128~127
char‘\u0000’2BChar(char)0~(char)127
short(short)02BShort-128~127
int04BInteger-128~127
long0L8BLong-128~127
float0.0f4BFloat
double0.0d8BDouble
  • 集合中不同类型的元素使用不同的基本类型来表示
  • 各种不同的数据类型代表不同的数据结构。

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 (阻塞队列)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客星云

谢谢认可,希望对你的学习有帮助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值