数组链表工具

import java.lang.reflect.Array;
import java.util.*;

/**

  • 数组、链表工具
    /
    public class ArrayUtil {
    /
    *

    • 创建数组
    • @param obj 对象列表
    • @param
    • @return
      /
      public static T[] create(T… obj) {
      Class calcedType=calcElementType(obj);
      Object newArray = Array.newInstance(calcedType, obj.length);
      for (int i = 0; i < obj.length; i++) {
      Array.set(newArray,i,obj[i]);
      }
      return (T[]) newArray;
      }
      /
      *
    • 数组转List
    • @param arr 数组
    • @param
    • @return
      /
      public static List arrayToList(T[] arr) {
      List result = new ArrayList<>();
      for (T t : arr) {
      result.add(t);
      }
      return result;
      }
      /
      *
    • List转数组
    • @param list List对象
    • @param
    • @return
      /
      public static T[] listToArray(List list) {
      Class arrClz = calcElementType(list);
      Object result = Array.newInstance(arrClz, list.size());
      for (int i = 0; i < list.size(); i++) {
      Array.set(result, i, list.get(i));
      }
      return (T[]) result;
      }
      /
      *
    • 获取数组元素的类型
    • 如果存在类型不一致的情况,则获取Object的类型
    • @param array List对象
    • @param
    • @return
      /
      public static Class calcElementType(T[] array) {
      List types = new ArrayList<>();
      Class arrClz = null;
      for (T t : array) {
      if (t != null && !types.contains(t.getClass())) {
      types.add(t.getClass());
      }
      }
      if (types.size() == 1) {
      arrClz = types.get(0);
      } else {
      arrClz = Object.class;
      }
      return arrClz;
      }
      /
      *
    • 获取集合元素的类型
    • 如果存在类型不一致的情况,则获取Object的类型
    • @param list List对象
    • @param
    • @return
      /
      public static Class calcElementType(Collection list) {
      List types = new ArrayList<>();
      Class arrClz = null;
      for (T t : list) {
      if (t != null && !types.contains(t.getClass())) {
      types.add(t.getClass());
      }
      }
      if (types.size() == 1) {
      arrClz = types.get(0);
      } else {
      arrClz = Object.class;
      }
      return arrClz;
      }
      /
      *
    • 数组转下标索引表
    • @param array 数组/List
    • @param offset 转换后下标偏移
    • @return
      /
      public static Map<Integer, T> toIndexMap(T[] array, int offset) {
      Map<Integer, T> result = new LinkedHashMap<>();
      if (!ObjectUtil.isArray(array)) {
      throw new RuntimeException(“转换下标索引表错误:不是数组”);
      }
      int size = ObjectUtil.size(array);
      for (int i = 0; i < size; i++) {
      result.put(i + offset, (T) ObjectUtil.get(array, i));
      }
      return result;
      }
      /
      *
    • 数组转下标索引表
    • @param array 数组/List
    • @return
      /
      public static Map<Integer, T> toIndexMap(T[] array) {
      return toIndexMap(array, 0);
      }
      /
      *
    • 下标索引表转数组
    • @param indexMap 下标索引表
    • @param offset 下标偏移量修正
    • @return
      /
      public static T[] fromIndexMap(Map<Integer, T> indexMap, int offset) {
      List keys = ObjectUtil.getKeys(indexMap);
      List insertKeys = new ArrayList<>();
      for (Object key : keys) {
      insertKeys.add(Integer.parseInt(key.toString()) + offset);
      }
      int maxIndex = 0;
      for (Integer insertKey : insertKeys) {
      if (insertKey > maxIndex) {
      maxIndex = insertKey;
      }
      }
      Class calcedType = calcElementType(indexMap.values());
      Object result = Array.newInstance(calcedType, maxIndex + 1);
      for (Integer insertKey : insertKeys) {
      Array.set(result, insertKey, ObjectUtil.get(indexMap, insertKey - offset));
      }
      return (T[]) result;
      }
      /
      *
    • 下标索引表转数组
    • @param indexMap 下标索引表
    • @return
      */
      public static T[] fromIndexMap(Map<Integer, T> indexMap){
      return fromIndexMap(indexMap,0);
      }

    /**

    • 将数组转换为指定类型数组
    • @param array
    • @param clz
    • @param
    • @param
    • @return
      */
      public static <T,K> T[] parseArray(K[] array, Class clz){
      Object newArray = Array.newInstance(clz, array.length);
      for (int i = 0; i < array.length; i++) {
      if(“String”.equals(clz.getSimpleName())&&array[i]!=null){
      Array.set(newArray,i,array[i].toString());
      }else{
      Array.set(newArray,i,array[i]);
      }
      }
      return (T[]) newArray;
      }

    /**

    • 转为String数组
    • @param array
    • @param
    • @return
      */
      public static String[] parseStringArray(T[] array){
      return parseArray(array,String.class);
      }

    /**

    • 转换为Integer数组
    • @param array
    • @param
    • @return
      */
      public static Integer[] parseIntegerArray(T[] array){
      return parseArray(array,Integer.class);
      }

    /**

    • 转换为Boolean数组
    • @param array
    • @param
    • @return
      */
      public static Boolean[] parseBooleanArray(T[] array){
      return parseArray(array,Boolean.class);
      }

    /**

    • 转换为Double数组
    • @param array
    • @param
    • @return
      */
      public static Double[] parseDoubleArray(T[] array){
      return parseArray(array,Double.class);
      }

    /**

    • 转换为Long数组
    • @param array
    • @param
    • @return
      */
      public static Long[] parseLongArray(T[] array){
      return parseArray(array,Long.class);
      }

    /**

    • 转换为Short数组
    • @param array
    • @param
    • @return
      */
      public static Short[] parseShortArray(T[] array){
      return parseArray(array,Short.class);
      }

    /**

    • 转换为Char数组
    • @param array
    • @param
    • @return
      */
      public static Character[] parseCharArray(T[] array){
      return parseArray(array,Character.class);
      }

    /**

    • 将高维数组第二层降维到第一层
    • @param array 数组
    • @return
      */
      public static Object[] dimensionReduction(Object[] array){
      List result=new ArrayList<>();
      for (int i = 0; i < array.length; i++) {
      if(ObjectUtil.isArray(array[i])){
      int innerSize = ObjectUtil.size(array[i]);
      for (int j = 0; j < innerSize; j++) {
      result.add(ObjectUtil.get(array[i],j));
      }
      }else{
      result.add(array[i]);
      }
      }
      return result.toArray(new Object[]{});
      }
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言版本的直观链表创建和读取工具,隐藏了链表的操作细节 可以非常方便地在单片机等平台做FIFO应用,前提是不要用的太嗨,在极小内存的平台上建立好多个FIFO 支持多线程程序,目前尚未现BUG /*---------------------------- 版本 : V0.01 作者 : ICARUS 日期 : 2019年6月3日 ------------------------------*/ //--------------------------------------------------------------------------------------------// 内置函数 int SL_Create( ) 创建一个数据链表,返回其在系统内的ID值,创建不成功则返回 SL_R_ERR int SL_Delete(int ID) 删除某个使用SL_Create()函数创建过的链表 int SL_InsertInturn(int ID,char* chain,int len,char ** NewNode) 向链表序号为ID的链表尾部插入chain为首地址,长度为len的数据块,数据块在系统中的内存地址将被NewNode返回,若想得到该内存地址,用(*NewNode) 使用示例: char * NewNode; SL_InsetInturn(5,"Hey,boy",strlen("HeyBoy\r\n"),&NewNode;); printf("%s",*NewNode); //------------------------------------------------------------------------------------------// int SL_ReadInturn(int ID,char * chain) 从链表序号为ID的链表头部读取数据到chain中,若返回值大于0,则返回值为数据长度,否则读取失败或链表中已无数据可读。 这一读操作会把数据节点从链表中移除 使用示例: int ReadLen; char chain[1500]; ReadLen = SL_ReadInturn(5,chain); if(ReadLen > 0) { ..... } 注意:由于时间原因,没有来得及修改SL_NodeModify()函数的实现,代码中注释掉的部分请先不要使用,请等待下一版本布 使用时配合自定义的数据类型效果更佳。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值