数组注意:
数组是引用数据类型 是一种线性结构
length为其唯一的属性 下标控制操作
一维数组
实例化数组
实例化数组的几种类型---实例化后要想赋值 必须循环
数据类型[] 数组名 = new 数据类型[长度];-----声明的同时实例化
数据类型[] 数组名 ;
数组名== new 数据类型[长度];-------先声明后实例化
赋值的几种类型
数据类型[] 数组名 = new 数据类型[长度]{值...}------实例化并赋值
数据类型[] 数组名 ={值...}----直接赋值开辟空间
数据类型[] 数组名 ;
数组名== new 数据类型[长度]{值...};-------先声明后实例化赋值
二维数组
实例化方面与赋值一维数组无异 只要是[]改为2个即可 还有{值}也要有行列之分
差异之处:
一维数组数组名.length直接表示数组长度
二二维数组里面数组名.length表示 行数 数据名[].length表示列数
优势
访问速度快 能存储多个同类型的数据
劣势
只能存储同一类型数据
空间不能加载或缩短
只有相同类型的数组才可以赋给对方
队列
一种类 封装对数组的操作 解决数组中空间问题 只能存储一种数据类型的问题
使用泛型E这个概念实现多种数据存储
任务:
1.随机2000-3000之间的数据,存入到一维数组中,并且使用三种方式对数组排序。
2.实例化一个二维数组,给数组中的每一个元素赋值,然后找出最大值的元素,但是记住不要改变数组。
3.实现一个通用的队列
4.数组和队列总结
1 随机2000-3000之间的数据,存入到一维数组中,并且使用三种方式对数组排序。
思路 首先创建一个数组对象
然后 利用循环和随机函数对一维数组赋值
插入排序思路
外层循环选取元素 从第二个元素开始 到最后一个元素
选取一个元素为当前元素进入内存循环
假设前面的元素是有序的 将这个元素与其前面的比较若大的话内存循环
结束 若小的继续比较直到大于它前面的元素
冒泡排序 两两比较 依次交换
外层循环控制趟数一共是此数组的长度-1次 内存循环控制进行两两比较
第一次将最大的数排好序 再是第二大的 按照此规则 依次排序
选择排序
将当前元素下标赋给一个变量 然后下标为变量的元素与其他元素比较 将较小的元素小标 的放入到变量中 最后判断变量和元素的小标的和当前元素下标是否相同 使得当前元素是最 小的
package cn.tjn.study0713;
import java.util.Random;
public class Text1Array {
public static void main(String[] args) {
int array[] = creatArray(10);
print(array);
System.out.println("===================插入排序=================");
charu(array);
print(array);
System.out.println("===================冒泡排序=================");
maopao(array);
print(array);
System.out.println("===================选择排序=================");
xuanze(array);
print(array);
}
public static int[] creatArray(int length) {
int array[] = new int[length];
Random rand = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = rand.nextInt(1000) + 2000;
}
return array;
}
public static void print(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
System.out.println();
}
// 直接插入排序
public static void charu(int[] array) {
for (int i = 1; i < array.length; i++) {
int k = array[i];
for (int j = i; j >= 1; j--) {
if (k < array[j - 1]) {
array[j] = array[j-1];
array[j-1] = k;
}
}
}
}
// 冒泡排序
public static void maopao(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
// 选择排序
public static void xuanze(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int k = i;
for (int j = i+1; j < array.length; j++) {
if (array[j] < array[k]) {
k = j;
}
if (k != i) {
int temp = array[i];
array[i] = array[k];
array[k] = temp;
}
}
}
}
}
2.实例化一个二维数组,给数组中的每一个元素赋值,然后找出最大值的元素,但是记住不要改变数组。
思路 实例化一个二维数组 并利用2层循环赋值
再利用循环找出最大值 具体 首先将第一个元素假设为最大的赋给变量 然后利用循环使表量和其他的元素比较 将较大的放入变量中 最后输出
ackage cn.tjn.study0713;
import java.util.Random;
public class Text2Array {
public static void main(String[] args) {
int[][] array = creat(5,5);
print(array);
max(array);
}
public static int[][] creat(int row, int column){
int[][] array = new int [row][column];
Random rand = new Random();
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
array[i][j]=rand.nextInt(100);
}
}
return array;
}
public static void max(int[][] array){
int k=array[0][0];
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(k<=array[i][j]){
k=array[i][j];
}
}
}
System.out.println(k);
}
public static void print(int[][] array){
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+"\t");
}
System.out.println();
}
}
}
3.实现一个通用的队列
首先定义一个接口 写好所有要在队列中要实现的方法 然后还需要一个测试类
看队列中的中的方法是否正确
注意原数组的实例化 在队列中的构造函数 要区分 obl.length 和 initcount的区别
obl.length表示数组的长度 initcount新增元素的个数加上构造函数给的已有元素个数
package cn.tjn.study0713;
/**
* 自定义一个队列类SamlpList
*
* @author Administrator
*
*/
public class SampleList<E> implements Spl<E> {
// 定义一个私有的数组对象属性
private Object[] obl = null;
// 记录队列中已经存储了多少个元素
private int initCount = 0;
private int incresCount = 1;
// 使用默认参数构造队列
public SampleList() {
obl = new Object[0];
}
// 创建时指定队列的初始化大小
public SampleList(int initCount) {
this.initCount = initCount;
obl = new Object[initCount];
}
// 创建时指定队列的初始化大小,和每次增长比率
public SampleList(int initCount, int incresCount) {
this.initCount = initCount;
obl = new Object[initCount];
this.incresCount = incresCount;
}
// 向队列中添加一个元素 队列长度+1
public void add(E e) {
Object[] temp = new Object[obl.length + incresCount];
for (int i = 0; i < obl.length; i++) {
temp[i] = obl[i];
}
temp[obl.length] = e;
this.initCount++;
obl = temp;
}
// 将另一个队列中的所有对象加到队列的后面
public void addall(SampleList<E> list) {
Object[] temp = new Object[obl.length + list.size()];
for (int i = 0; i < obl.length; i++) {
temp[i] = obl[i];
}
for (int i = 0; i < list.size(); i++) {
temp[i + obl.length] = list.get(i);
this.initCount++;
}
obl = temp;
}
// 在队列中的指定索引位置删除一个元素 并返回该元素 队列长度-1
public E delete(int index) {
E item = (E) obl[index];
for (int i = index; i < obl.length; i++) {
obl[i] = obl[i + 1];
}
this.initCount--;
return item;
}
// 获取指定索引位置的元素
public E get(int index) {
if (index < 0 || index > initCount)
return null;
E item = (E) obl[index];
return item;
}
// 在队列的指定位置插入一个对象
public void insert(E str, int index) {
obl[index] = str;
}
// 获取队列中元素总数的方法
public int size() {
return initCount;
}
}
package cn.tjn.study0713;
/**
* 自定义泛型队列的接口
*
* @author NetJava
*
*/
public interface Spl<E> {
// 在队列的指定位置插入一个对象
public void insert(E str, int index);
// 向队列中添加一个元素 队列长度+1
public void add(E str);
// 获取指定索引位置的元素
public E get(int index);
// 获取队列中元素总数的方法
public int size();
// 在队列中的指定索引位置删除一个元素 并返回该元素 队列长度-1
public E delete(int index);
// 将另一个队列中的所有对象加到队列的后面
public void addall(SampleList<E> list);
}
package cn.tjn.study0713;
/**定义一个测试类
* @author
*/
public class Splmain {
/**
* 主函数
*/
public static void main(String[] args) {
//实例化二个对象一个传参数一个不传参数
SampleList spll1= new SampleList();
SampleList spll2= new SampleList(5);
//向队列对象spll1中添加2个元素一个为整形一个为字符串
String str1="添加无参构造的字符串元素";
int i1=5;
spll1.add(str1);
spll1.add(i1);
//打印
for(int i=0;i<spll1.size();i++){
System.out.println(spll1.get(i));
}
System.out.println("spll1队列的长度是:"+spll1.size());
System.out.println("===========================================");
String str2="添加有参构造的字符串元素";
int i2=3;
spll2.add(str2);
spll2.add(i2);
//打印
for(int i=0;i<spll1.size();i++){
System.out.println(spll2.get(i));
}
System.out.println("spll2队列的长度是:"+spll2.size());
System.out.println("===========================================");
spll2.addall(spll1);
//打印
for(int i=0;i<spll2.size();i++){
System.out.println(spll2.get(i));
}
System.out.println(spll2.size());
System.out.println("===========================================");
}
}
分享到:
相关推荐
**泛型循环队列**,也称为环形队列,利用数组的循环特性,使得队列的首尾可以无缝连接。这种队列在处理大量数据流时有更高的效率,因为它避免了数组的动态扩展和收缩。在C#中,我们可以通过自定义类来实现泛型循环...
本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...
这个实例185可能是进一步讨论泛型数组类如何应用于实际项目,例如作为缓存、队列或其他数据结构的基础,或者作为工具类帮助处理不同类型的数据集。标签中的"源码"表明可能有具体的代码实现供学习,而"工具"可能意味...
在C++中,标准库提供了一个名为`deque`的容器,但在这里,我们讨论的是一个自定义实现的基于数组的双端队列类模板。 在C++编程中,类模板(Class Template)是泛型编程的一种形式,允许创建可适用于不同数据类型的...
1. **存储结构**:一般使用泛型列表(`List<T>`)或者数组(`T[]`)来存储元素。 2. **比较器**:使用`IComparer<T>`接口或`Comparison<T>`委托来定义元素之间的比较规则。默认情况下,C#中的`IComparable<T>`接口可...
Delphi的TArray是泛型数组,它允许我们创建固定大小的数组并处理不同类型的元素。TArray提供了很多实用的方法,如Length属性获取数组长度,SetLength函数调整数组长度,以及低级的索引访问和赋值操作。 在提供的...
4. **数据类型**:C#支持多种数据类型,包括基本类型(如整型、浮点型、布尔型、字符型等)和引用类型(如类、接口、数组)。在实验中,`float`用于存储圆的半径、直径、周长和面积,`int`用于处理整数。 5. **变量...
### Delphi 泛型使用全集(队列_栈_字典_列表_对象列表) #### 一、泛型概述 在 Delphi 中,泛型编程允许开发人员编写灵活且可重用的代码,该代码可以操作不同类型的值。通过使用泛型,我们可以创建能够处理各种...
链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...
泛型允许我们在编程时指定容器(如列表、队列等)所容纳对象的类型,从而在编译阶段就能捕获类型错误,而非等到运行时。 在定义泛型时,我们使用尖括号 `和 `>` 来声明类型参数(type parameter),例如 `List<T>` ...
编译器会在编译时检查类型一致性,如果尝试向泛型列表或数组中添加不兼容的类型,编译器会抛出错误,从而避免了运行时可能的类型异常。 在实现泛型支持时,我们需要确保所有操作(如添加元素、删除元素、遍历列表)...
- **Stack 和 Queue 的泛型版本**:`Stack<T>` 和 `Queue<T>` 是 `Stack` 和 `Queue` 的泛型版本,提供了类型安全的栈和队列操作。 - **2.2.5 链表的实现和可空类型** - **链表实现**:可以使用泛型来实现链表,...
1. 泛型容器:例如,自定义的堆栈、队列或者优先级队列等数据结构,利用泛型可以处理任何类型的数据,提高代码的复用性。 2. 泛型算法:比如排序、查找等算法,通过泛型,可以应用于不同类型的数据,无需为每种类型...
LinkedList实现了List、Deque和Iterator接口,可以作为双端队列使用。 3. **HashSet**: 基于哈希表(HashMap)实现,存储不重复的元素。插入和查找速度较快,但无特定顺序。 4. **HashMap**: 是一个键值对的集合,...
在DGL中,泛型主要体现在各种容器类和算法上,例如列表(List)、集合(Set)、映射(Map)和队列(Queue)等,它们都支持不同类型的元素,极大地提高了代码的灵活性和可维护性。 1. **泛型容器:** - **TList**:...
泛型队列遵循先进先出(FIFO)原则,使用`Enqueue`方法添加元素到队尾,`Dequeue`方法移除并返回队首元素。`Queue<T>`实现了`ICollection<T>`和`IEnumerable<T>`接口。 6. **泛型栈(Stack)** 栈遵循后进先出...
- `ArrayDeque`:基于数组的双端队列。 - `LinkedList`:也可以作为队列使用。 - `PriorityQueue`:按元素的自然顺序或比较器确定顺序。 #### 结论 通过对泛型和集合的深入分析,我们不仅了解了它们的基本概念...
在C++中实现队列可以借助数组、链表或者STL中的queue容器来完成。以下是对队列数据结构在C++中实现及其在银行接待系统仿真应用的详细说明。 1. **队列的定义与基本操作** - 队列的结构通常由两个指针定义:front...
顺序队列是一种线性数据结构,其元素在内存中是连续存储的,类似于数组。队列的主要特点是“先进先出”(FIFO),即最早进入队列的元素最先离开。顺序队列的基本操作包括入队(enqueue)、出队(dequeue)、查看队首...
例如,ArrayList是以动态数组为基础的列表实现,适合随机访问,而LinkedList则适用于频繁插入和删除的场景。Set接口不允许重复元素,而List允许。Queue接口则用于表示先进先出的数据结构,如队列。 泛型是Java集合...