Java数据结构
一、数据结构
1、什么是数据结构?
数据结构指的是计算机对数据存储的一种安排。
二、数据存储之数组存储
1、数组存储数据的格式
数据类型[ ] 变量名 = new int[ ]; 这是动态存储
2、数组存储的特点
①数组一旦创建,长度是固定的;
②数组可以存储多个数据相同的数据类型。
三、自定义一个可以存储任意长度、任意数据类型的引用数据类型(Java中已经有这个类,是使用的数组实现的,但是还是建议自己写一下,锻炼思维、巩固基础)
/* *定义一个类来存储我们的数据,后续的所有方法都在这个类中进行 * */ class DateConstructMethod{ }
既然可以存储任意数据类型,那么我们应该想到面向对象编程,所以我们可以从以下几个方面来实现这个需求:
①实现一个可以自动扩容的int数组,里面有一个add方法来添加数据和一个getLength方法来获取数组的元素个数,并且覆写Object中的toString方法可以打印出list类型的表;
②实现可以存储任意数据类型;
③、实现数组的增删改查方法。
1、实现一个指定长度的数组,里面有一个add方法来添加数据和一个getLength方法来获取数组的元素个数,并且覆写Object中的toString方法可以打印出list类型的表;
int[] elements = new int[10]; int size;//记录元素的个数 /** * 定义的这个add方法是往elements数组里面添加元素的,但是当添加的元素个数大于数组长度时会抛出异常, * 因此我们做了一个判断,当元素个数大于等于数组长度时,那么就会生成一个新数组newElements,并且将 * elements数组中的数据全部拷贝到newElements数组中,然后newElements数组将地址赋值给elements, * 再往里面添加元素。 * 注意:①此处数组扩容你可以选择一次扩容一个、按百分比扩容、按倍数扩容等; * ②size每次都在自增,当添加完元素后,size的大小应该等于元素个数。 * @param value */ public void add(int value){ if(size >= elements.length){ int[] newElements = new int[2*elements.length]; System.arraycopy( elements, 0, newElements, 0, size); elements = newElements; } elements[size++] = value; } public int getLength(){ return size; } @Override /** * 覆写Object类中的toString方法,因为在刚添加完元素后,我们的elements数组中可能有部分null值, * 但是我们在打印成list表时又不希望看到,所以我们创建了一个不含null值长度的新数组,并将数据拷贝进去, * 然后利用Arrays.toString()方法将新数据以list表的形式return出去。 */ public String toString() { int[] newElements = new int[size]; System.arraycopy(elements, 0, newElements, 0, size); return Arrays.toString(newElements); }
2、实现可以存储任意数据类型。
这一步非常简单,因为Object类是所有类的基类,因此Object是一种数据类型,可以存储任意数据类型,于是,我们只需要将代码中的所有int数据类型改为Object数据类型即可。
3、实现数组的增删改查方法。
/** * 查找指定索引出的元素 * @param index * @return */ public Object getElementsByIndex(int index){ if(index<0 || index>size-1){ throw new ArrayIndexOutOfBoundsException("请输入正确的索引"); /* * 今后所有不满足条件的都采用抛出异常的方式 */ } return elements[index]; } /** * 查找指定元素第一次出现的索引 * @param obj * @return */ public int getIndexByElements(Object obj){ int index = -1; for (int i = 0; i < size; i++) { if(elements[i].equals(obj)){ index = i; break; } } return index; } /** * 删除指定索引处的元素 * 思路:想要删除某个元素其实就是将这个元素后面的元素copy过来,从开始删除的这个元素的位置一个一个的放。 */ public void deleteElementsByIndex(int index){ if(index<0 || index>size-1){ throw new ArrayIndexOutOfBoundsException("请输入正确范围内的索引"); } System.arraycopy(elements, index+1, elements, index, size-index-1); elements[size-1] = null; size--; } public void deleteElementsByElements(Object obj){ for (int i = 0; i < size; i++) { int index = getIndexByElements(obj); if(index != -1){} deleteElementsByIndex(index); } }